A.java
public class A<E> {
Class cClass;
public A(Class rClass) {
this.cClass = rClass;
}
public E get() throws IllegalAccessException, InstantiationException {
return (E) this.cClass.newInstance();
}
}
A1.java
public class A1 extends A {}
我试图将类A设计为泛型,类A1是类A的子类。对象创建应该看起来像这样。
A<A1> a1 = new A<>();
我想提供一种方法,没有人会像这样创建一个对象
A<B1> a1 = new A<>();
其中B1类不是A的子类。
我该如何解决这个问题?错误
error: constructor Operation in class A<E> cannot be applied to given types
答案 0 :(得分:0)
我不知道你为什么需要这样的构造,但为了使你的代码有效,你应该添加class A<E extends A>
,如果你想要
提供一种方法,没有人会像这样创建一个对象
A<B1> a1 = new A<>();
其中B1类不是A的子类。
public class A<E extends A> {
private Class<E> cClass;
public A() {
}
public A(Class<E> rClass) {
this.cClass = rClass;
}
public E get() throws IllegalAccessException, InstantiationException {
return this.cClass.newInstance();
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
A<A1> a = new A<>(A1.class);
A1 a1 = a.get();
//error
//A<B1> a = new A<>();
}
}
您可以删除默认构造函数public A() {}
,但在A1类中必须添加
public A1() {
super(A1.class);
}
更新:根据您的评论,您希望在运行时获取一个泛型类,而不可能。在this问题
处找个looke