【发布时间】:2013-07-03 08:17:03
【问题描述】:
我尝试实例化以下 Java 代码中定义的内部类:
public class Mother {
public class Child {
public void doStuff() {
// ...
}
}
}
当我尝试获取这样的 Child 实例时
Class<?> clazz= Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();
我得到了这个例外:
java.lang.InstantiationException: com.mycompany.Mother$Child
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
...
我错过了什么?
【问题讨论】:
-
呃,你的内部类不是静态的......这是故意的吗?可能来自 C# 背景? ;)
-
感谢您提出“静态”的想法!事实上,使用静态嵌套类而不是内部类让我的生活更轻松。
-
问题是,如果一个内部类没有被声明为静态的,那么这个类的实例依赖于外部类的一个实例的存在;这与默认情况下所有内部类都是“静态”的 C# 不同,并且可以在没有父实例的情况下实例化。
标签: java reflection instantiationexception