访问 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 检查,这可能会导致空指针异常。
当我尝试从扩展通用抽象 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 检查,这可能会导致空指针异常。