为什么抛出java.lang.InstantiationException?

时间:2017-11-25 11:53:52

标签: java reflection constructor inner-classes

请看以下代码:

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构造函数。有人可以解释一下吗?

2 个答案:

答案 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";
    }
}