通过c.newInstance()在Java中创建子类的实例

时间:2013-05-16 16:22:37

标签: java

创建子类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)

有人可以说我做错了吗。

2 个答案:

答案 0 :(得分:0)

由于YX的非静态内部类,因此您无法直接创建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{