0

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

有人可以说我做错了什么。

4

2 回答 2

0

由于Y是 的非静态内部类X,因此不能Y直接创建 的实例

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);
于 2013-05-16T16:26:45.730 回答
0

Y 类是一个非静态嵌套类。如果没有 X 类的实例,您将无法创建它。

根据您的需要,最简单的解决方案可能是将其设为静态:

public static class Y implements I{
于 2013-05-16T16:27:10.240 回答