Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过c.newInstance()在Java中创建子类的实例_Java - Fatal编程技术网

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

通过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

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