当我尝试从扩展通用抽象类的类实例化对象时。因为通用抽象类没有合适的构造函数,所以它不会让我失望。
public abstract class AbstractClass<T> {
private final Class<T> entityClass;
public AbstractClass(Class<T> entityClass) {
this.entityClass = entityClass;
}
}
这是我正在谈论的通用抽象类。
public class Imp extends AbstractClass {
public Imp(Class entityClass) {
super(entityClass);
}
}
如果我想访问Imp类,那么我将尝试通过普通的构造函数实例化它。但是尝试时出现以下错误:
public class Imp extends AbstractClass {
public Imp(){
}
public Imp(Class entityClass) {
super(entityClass);
}
}
类AbstractClass中的构造方法AbstractClass无法应用于所需的给定类型:类
因此,如果我理解正确,那么通过扩展泛型抽象类,您将无法在任何地方实例化该类?
如果无法从其他类访问Imp类,我应该如何使用该类?
答案 0 :(得分:3)
您需要像这样扩展它:
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);
}
}
切勿使用没有通用参数的通用类。
只是猜测,但也许您实际上想要这样的东西:
public class IntegerImpl extends AbstractClass<Integer> {
public IntegerImpl () {
super(Integer.class);
}
}
答案 1 :(得分:1)
如果要使用无参数构造函数初始化Imp类,则AbstractClass也应具有此(无参数)构造函数,但是在这种情况下,'entityClass'属性不再是final。
如果您使用'entityClass'而不进行非空检查,则可能导致空指针异常。