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