当前位置: 首页 > 知识库问答 >
问题:

生成类的新实例在运行时失败[重复]

公西培
2023-03-14
public class A {
    public void n() { 
        System.out.println("In A"); 
    }
}

public class B extends A {
    @Override
    public void n() {
        System.out.println("In B");
        super.n();
    }
}

public class C {
    public A m_a;
    public <T extends A> C( Class<T> a ) {
        try {
            m_a = a.newInstance();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    public void print(){ m_a.n(); };
}
C c = new C( B.class );

但得到以下错误:

java.lang.InstantiationException: testdbvsfile.Main$B
    at java.lang.Class.newInstance(Unknown Source)
    at testdbvsfile.Main$C.<init>(Main.java:63)
    at testdbvsfile.Main.main(Main.java:76)
Caused by: java.lang.NoSuchMethodException: testdbvsfile.Main$B.<init>()
    at java.lang.Class.getConstructor0(Unknown Source)<br>
    ... 3 more

如何使其工作?
谢谢您的帮助。

顺便说一句:我正在使用JRE1.8.0_65

共有1个答案

鞠隐水
2023-03-14

问题是您使用的是非静态内部类。这在堆栈跟踪中很明显,其中b类的名称为main$b,而在其声明中缺少static

非静态成员类的构造函数使用包含类实例的隐式参数。

使内部类静态化可以解决这个问题。您还可以通过将ABC类移出Main类来解决这个问题。

 类似资料: