クラス名を入力できるようになり、アプリケーションがそのクラスをロードしてそのインスタンスを作成できるようになるかどうかを確認するために、リフレクションを試しています。数回試行した後、パッケージ名なしでクラス名を貼り付けることができないことがわかったClass.forName()
ので、ロードされたすべての利用可能なパッケージのリストを取得しようとし、各パッケージで入力したクラスをロードしようとしましたヒットするまでの名前。
これは私がこれまでに得たものです:
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String s = "";
do
{
ClassLoader clsldr = ClassLoader.getSystemClassLoader();
Package[] pkgs = Package.getPackages();
s = console.readLine();
if(s.equals(":exit"))
{
System.exit(0);
}
boolean classFound = false;
Object loadedClass = null;
String classname = "";
for (int i = 0; i < pkgs.length; i++) {
Package package1 = pkgs[i];
try
{
classname = package1.getName().replace('/', '.') + "." + s;
clsldr.loadClass(classname);
loadedClass = Class.forName(classname);
classFound = true;
}
catch(Exception e)
{
}
}
System.out.println("LOADED A CLASS!!!!");
System.out.println(classname);
System.out.println(loadedClass);
}
while(s.length() == 0);
それは非常に奇妙な方法で動作します。たとえば、プロンプトで「オブジェクト」と入力すると、何とかロードできますsun.net.util.Object
が、実際のオブジェクトを印刷すると、class java.lang.Object
. 入力した他のいくつかのものと同様に、同じことが得られString
ます。私が試した1つの興味深いものはint
、ロードsun.net.util.int
され、オブジェクトを印刷するとnullが返されたことです。私が試したときに別のことが起こりましたJava
:
Java
LOADED A CLASS!!!!
sun.net.util.Java
null
ここで何が起こっているのか、誰にも手がかりがありますか? sun.net.util
これを引き起こしているパッケージに特別な何かがありますか? 自分のコードが思い通りに動作しないことはあまり気にしません。この奇妙な動作の原因を知りたいだけです。
Java のバージョン:
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
それが違いを生む場合、私はWindows 8 64ビットを使用しています。