Ste*_*han 62 java reflection instantiationexception
我尝试实例化以下Java代码中定义的内部类:
public class Mother {
public class Child {
public void doStuff() {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我试图像这样得到一个Child的实例
Class<?> clazz= Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
java.lang.InstantiationException: com.mycompany.Mother$Child
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
...
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
Jon*_*eet 116
还有一个额外的"隐藏"参数,它是封闭类的实例.您需要使用构造函数Class.getDeclaredConstructor
,然后提供封闭类的实例作为参数.例如:
// All exception handling omitted!
Class<?> enclosingClass = Class.forName("com.mycompany.Mother");
Object enclosingInstance = enclosingClass.newInstance();
Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");
Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);
Object innerInstance = ctor.newInstance(enclosingInstance);
Run Code Online (Sandbox Code Playgroud)
编辑:或者,如果嵌套类实际上不需要引用封闭的实例,请改为使用嵌套的静态类:
public class Mother {
public static class Child {
public void doStuff() {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31830 次 |
最近记录: |