请看以下代码:
public class Outer {
public static void main(String[] args) throws Exception {
new Outer().greetWorld();
}
private void greetWorld() throws Exception {
System.out.println(Inner.class.newInstance());
}
public class Inner {
public Inner () {}
public String toString(){
return "HelloWorld";
}
}
}
为什么抛出java.lang.InstantiationException
?
毕竟,嵌套类Inner
具有nully构造函数。有人可以解释一下吗?
答案 0 :(得分:6)
内在类中的[隐含]第一个参数'构造函数是对其封闭类的引用。通过反射调用它时,您需要明确地提供它:
private void greetWorld() throws Exception {
System.out.println(Inner.class.getConstructors()[0].newInstance(this));
}
答案 1 :(得分:0)
您的类需要实例化,一种解决方案是将其声明为静态。
static class Inner {
public Inner () {}
public String toString(){
return "HelloWorld";
}
}