実行時にクラスを動的に作成する必要があるプロジェクトがあります。使用可能な情報は、文字列形式のクラス名のみです。私は今、いくつかの非常に単純なReflectionライブラリメソッドを使用してテストしていますが、私の質問は、「動的に」ロードしようとしているクラスが同じディレクトリにある場合、完全に修飾されたクラス名を指定する必要があるのはなぜですか?私はLinuxを使用しており、開発環境はありません。同じディレクトリで呼び出そうとしているすべてのクラスだけを使用しており、パッケージ宣言はまったくありません。Reflectionを使用するにはパッケージシステムを設定する必要がありますか?これがこの小さなコードスニペットです...
public class ReflectionTest {
public static void main(String[] args) {
try {
Class nodeClass = Class.forName("Node");
System.out.println(nodeClass.toString());
} catch (ClassNotFoundException cnfe) {
System.out.println("Error");
}
}
}
さて、これはエラーをスローします。しかし、Nodeのインスタンスを作成し、それをで完全修飾されたクラス名を取得するとNode.getClass().getName()
、代わりに「Node」が取得されます。そのため、Reflectionライブラリが「java」を使用してJVMを呼び出すのと同じように機能しない理由がわかりません。パッケージ名が指定されていない場合は、同じディレクトリを検索するだけです。どのクラスにもパッケージ名が関連付けられていない場合に、ユーザー定義のクラスでこのライブラリを使用する方法がわかりません。