假设我有这个:
class test{ private T[] elements; private int size; public test(int size) { this.size = size; elements = new T[this.size]; } }
这似乎是不可能的,因为编译器在尝试替换泛型代码之后不知道要调用哪个构造函数.我想知道的是,我该怎么做呢?我想这是可能的,因为它在C++中是多么容易完成.
编辑:对不起,我忘了元素声明中的[].
问题是,由于泛型类型参数由编译器T
转换Object
(它称为类型擦除),实际上你创建了一个数组Object
.你能做的是提供一个Class
功能:
class test{ private T[] elements; private int size; public test(Class type, int size) { this.size = size; elements = (T[]) Array. newInstance(type, size); } }
你会在这里找到一个更好的exlanation:Angelika Langer - 我可以创建一个组件类型是类型参数的数组吗?
通用数组的最简单替代方法是使用列表.