访问 Class 实现通用抽象 class

Accessing Class implementing generic abstract class

当我尝试从扩展通用抽象 class 的 class 实例化一个对象时。它不会让我因为通用抽象 class 没有合适的构造函数。

public abstract class AbstractClass<T> {

    private final Class<T> entityClass;

    public AbstractClass(Class<T> entityClass) {
        this.entityClass = entityClass;
    }    
}

这是我所说的通用摘要class。

public class Imp extends AbstractClass {

    public Imp(Class entityClass) {
        super(entityClass);
    }

}

如果我想访问 Imp class,那么我会尝试通过普通构造函数实例化它。但是我在尝试时遇到以下错误:

public class Imp extends AbstractClass {

    public Imp(){

    }

    public Imp(Class entityClass) {
        super(entityClass);
    }

}

class 抽象Class 中的构造函数抽象Class 无法应用于所需的给定类型:Class

所以如果我理解正确的话,通过扩展通用抽象 class 你不能在任何地方实例化 class?

如果无法从其他 classes 访问 Imp class,我应该如何使用 class?

你需要这样扩展它:

public class Imp<T> extends AbstractClass<T> {

    public Imp() {
        super(null); // you need to call an existing constructor from superclass (nothing specific about generic classes)
    }

    public Imp(Class<T> entityClass) {
        super(entityClass);
    }
}

切勿使用没有泛型参数的泛型 class。

只是猜测,但也许您真的想要这样的东西:

public class IntegerImpl extends AbstractClass<Integer> {

    public IntegerImpl () {
        super(Integer.class);
    }
}

如果你想使用无参数构造函数来初始化 Imp class,那么 AbstractClass 也应该有这个(无参数)构造函数,但是 'entityClass' 属性 不能在这种情况下不再是最终的。

如果您使用 'entityClass' 而不进行 not null 检查,这可能会导致空指针异常。