通过c.newInstance()在Java中创建子类的实例
在创建子类Y的实例时通过c.newInstance()在Java中创建子类的实例,java,Java,在创建子类Y的实例时 public class X implements I{ ... ... public class Y implements I{ ... ... } } 借 其中c是Y类,我得到这个异常: java.lang.InstantiationException: com.gmail.kubuxu.ms2d.Commands.VersionCommand$CCommand at java.lang.Cl
public class X implements I{
...
...
public class Y implements I{
...
...
}
}
借
其中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)
java.lang.InstantiationException:com.gmail.kubuxu.ms2d.Commands.VersionCommand和$CCommand
位于java.lang.Class.newInstance0(未知源)
位于java.lang.Class.newInstance(未知源)
在com.gmail.kubuxu.ms2d.CommandProcessor上(CommandProcessor.java:22)
位于com.gmail.kubuxu.ms2d.Conns.CommandServerProtocol.(CommandServerProtocol.java:13)
在com.gmail.kubuxu.ms2d.Conns.ClientConn.run(ClientConn.java:40)
位于java.lang.Thread.run(未知源)
有人能说出我做错了什么吗。因为
Y
是X
的非静态内部类,所以不能直接创建Y
的实例
像
您需要按照本文中的说明进行操作
Class oc=X.Class;
类别c=类别forName(“X$Y”);
构造函数con=c.getConstructors()[0];
Y i=(Y)con.newInstance(oc.newInstance());
系统输出打印LN(i);
类Y是一个非静态嵌套类。如果没有类X的实例,则无法创建它
根据您的需要,最简单的解决方案可能是将其设置为静态:
public static class Y implements I{
因为内部类不是静态的,所以这无论如何都不能工作。它的实例化需要一个外部实例。
Class clazz = Y.class
Y ref = clazz.newInstance();
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);
public static class Y implements I{