我有一个类表示一对相同类型的两个值(类型可以是一组特定类型中的任何一个):
public class Pair<E extends AClass>{
private E var1;
private E var2;
}
此类由框架使用,因此它需要一个无参数构造函数,我必须在其中实例化 2 个变量(var1,var2):
public class Pair<E extends AClass>{
private E var1;
private E var2;
public Pair(){
var1 = invoke constructor of type E;
var2 = invoke constructor of type E
}
}
这里显然有很多问题:
为了实例化变量,我应该以某种方式知道它的确切类型并调用该特定类型的构造函数;在最好的情况下,这意味着在构造函数中有一个相当大的 if else 语句,例如:
public Pair(){ if(var1 instanceof SpecificType1){ var1 = new SpecificType1(); var2 = new SpecificType2(); } }
即使我按照上述方式进行操作,我也会遇到一些问题,因为 var1 被声明为 E 类型,并且在尝试实例化 SpecficType1 并将结果对象分配给 var1/var2 时会出现类型不匹配错误。为了使其工作,我必须转换为 E :
var1 = (E)new SpecificType1();
但这破坏了编译时类型检查,因为我试图将特定类型转换为泛型类型。
这是 Java 中泛型的限制,还是这种情况不适合使用泛型?