在子类中扩展泛型超类

时间:2017-12-09 04:45:51

标签: java generics

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

1 个答案:

答案 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