インドは質問をします:
私は、各静的に定義された内部クラスからインスタンスを作成する必要がありますが、私が手にjava.lang.ClassNotFoundExceptionを。
まず、私は内部クラスを宣言した収集します:
public String[] getInnerClassNames(Class<?> p_class) {
Class<?>[] declaredClasses = p_class.getDeclaredClasses();
String[] innerClassNames = new String[declaredClasses.length];
for (int i = 0; i < declaredClasses.length; i++) {
innerClassNames[i] = declaredClasses[i].getCanonicalName();
}
return innerClassNames;
}
どこp_classは外側のクラスです。
第二に、私は与えられた内部クラス名のクラスのロードとインスタンス化を行います。
public Object createObjectByClassName(String p_className)
throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class<?> clazz = Class.forName(p_className);
return clazz.newInstance();
}
この内部クラス名の形式は次のとおりです。PACKAGE。OUTER_CLASS_NAME。INNER_CLASS_NAME。
私はここで何をしないのですか?
トムホーティン - tackline:
あなたが不足していますClass.getName
。
Class.getCanonicalName
Java言語仕様に応じた名前を返します。あなたは、JVM /バイトコードが使用している名前をしたいです。
JVMは、おおよそのJava 1.0言語に一致するので、名前が異なっています。互換性に作られたアプローチは、バイトコードレベルでのハッキングのビットのように、すべての新しい外観を作ります。
内部クラスは、そのコンテキストへの参照を必要とする。また、コンストラクタがよく、異なっていてもよいです。