可能重复:
What is the easiest alternative to a generic array in Java?
我有以下代码:
class B<X>
{
public void create()
{
List<X> l1 = new ArrayList<X>(); //No ERROR
X[] arrr = new X[10]; //ERROR
}
}
我知道由于类型擦除,我无法实例化Generic数组。但为什么我可以实例化一个通用List的实例?
答案 0 :(得分:5)
原因是使用类型擦除来实现泛型:
运行时不知道类型X
。这意味着您无法实例化该数组(未知类型)。
但是,由于您不需要(实际上不能使用)用于在运行时创建参数化类型的类型信息(再次:类型擦除),因此创建ArrayList<X>
不是问题。
请注意,无论类型参数是什么,ArrayList
总是在内部使用Object[]
进行实际存储。
答案 1 :(得分:0)
Angelika Langer提供了有关Java泛型的优秀文档。此链接回答了有关列表(和其他泛型类型)和数组之间的区别以及为什么无法以这种方式实例化数组的问题:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ104
简而言之:因为数组是协变的,所以不是类型安全来实例化参数化类型的数组。