创建子类Y的实例时
public class X implements I{
...
...
public class Y implements I{
...
...
}
}
通过
o = c.newInstance();
其中c是Y类我得到了这个例外:
java.lang.InstantiationException: com.gmail.kubuxu.ms2d.Commands.VersionCommand$CCommand
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at com.gmail.kubuxu.ms2d.CommandProcessor.<init>(CommandProcessor.java:22)
at com.gmail.kubuxu.ms2d.Conns.CommandServerProtocol.<init>(CommandServerProtocol.java:13)
at com.gmail.kubuxu.ms2d.Conns.ClientConn.run(ClientConn.java:40)
at java.lang.Thread.run(Unknown Source)
有人可以说我做错了吗。
答案 0 :(得分:0)
由于Y
是X
的非静态内部类,因此您无法直接创建Y
的实例
像
Class clazz = Y.class
Y ref = clazz.newInstance();
您需要按照此thread
中的说明进行操作Class<X> oc = X.class;
Class<?> c = Class.forName("X$Y");
Constructor<?> con = c.getConstructors()[0];
Y i = (Y)con.newInstance(oc.newInstance());
System.out.println(i);
答案 1 :(得分:0)
Y类是非静态嵌套类。如果没有类X的实例,则无法创建它。
根据您的需求,最简单的解决方案可能是将其设为静态:
public static class Y implements I{