我遇到了java和泛型类的问题 鉴于以下代码
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 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
答案 0 :(得分:5)
问题是您使用的是非静态内部类。从堆栈跟踪中可以看出这一点,其中Main$B
类的名称为B
类,其声明中缺少static
。
非静态成员类的构造方法将隐式参数与其封闭类的实例一起使用。
制作内部课程static
将解决此问题。您还可以通过将A
,B
和C
类移出Main
类来解决问题。