假设我有一个带有泛型参数 T 的泛型类,它是一个 Number 子类。我想在类构造期间初始化一个 T 数组。可能吗?如果是如何?如果不是,为什么?
public class AClass<T extends Number>{
private T array[];
private int arrayOfInt[];
public AClass(int size){
arrayOfInt = new int[size];
array = ? //what should I put here?
}
}
最佳答案
T 仅在编译时知道。它在运行时是未知的,因此您无法初始化数组的内容。无论您如何创建数组,每个值都将为 null
。
array = (T[]) new Number[size];
编辑:创建任何类型的实例的问题是您需要知道您想要的默认值是什么以及您想要调用哪个构造函数。例如没有 new Double()
如下所述,double[]
将比 Number[]
更高效、更快速,除非您需要较大的 long
值,否则它将能够存储所有可能的值。
关于Java泛型和数组构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222166/