Java中通用数组最简单的替代方法是什么?

9 java arrays generics

假设我有这个:

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 - 我可以创建一个组件类型是类型参数的数组吗?


Dan*_*yer 8

通用数组的最简单替代方法是使用列表.


mat*_*mat 0

我可能是错的,但你的声明看起来很奇怪,你不应该这样吗:

private T[] elements;
Run Code Online (Sandbox Code Playgroud)