通用列表和通用数组

Swa*_*rma 2 java generics

可能重复:
Java中通用数组最简单的替代方法是什么?

我有以下代码:

class B<X>
{
    public void create()
    {
        List<X> l1 = new ArrayList<X>(); //No ERROR

        X[] arrr = new X[10];   //ERROR
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道由于类型擦除,我无法实例化Generic数组.但为什么我可以实例化一个通用List的实例?

Joa*_*uer 5

原因是泛型是使用类型擦除实现的:

X在运行时不知道任何类型.这意味着您无法实例化该数组(未知类型).

但是,由于您不需要(实际上不能使用)用于在运行时创建参数化类型的类型信息(再次:类型擦除),因此创建一个ArrayList<X>不是问题.

请注意,无论类型参数是什么,内部ArrayList 始终使用Object[]实际存储.