Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型列表和泛型数组_Java_Generics - Fatal编程技术网

Java 泛型列表和泛型数组

Java 泛型列表和泛型数组,java,generics,Java,Generics,可能重复: 我有以下代码: class B<X> { public void create() { List<X> l1 = new ArrayList<X>(); //No ERROR X[] arrr = new X[10]; //ERROR } } B类 { 公共void create() { 列表l1=新的ArrayList();//无错误 X[]arrr=new X[10];//错误

可能重复:

我有以下代码:

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

        X[] arrr = new X[10];   //ERROR
    }
}
B类
{
公共void create()
{
列表l1=新的ArrayList();//无错误
X[]arrr=new X[10];//错误
}
}

我知道由于类型擦除,我无法实例化泛型数组。但是为什么我可以实例化泛型列表的实例呢?

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

运行时不知道类型
X
。这意味着您不能实例化该类型的数组(未知类型)

但是,由于在运行时创建参数化类型时不需要(实际上也不能使用)类型信息(同样是:类型擦除),因此创建
ArrayList
不是问题


请注意,在内部,无论类型参数是什么,
ArrayList
始终使用
对象[]
进行实际存储。

Angelika Langer提供了有关Java泛型的优秀文档。此链接回答了有关列表(和其他泛型类型)与数组之间的差异以及为什么不能以这种方式实例化数组的问题:


简而言之:因为数组是协变的,所以实例化参数化类型的数组是不安全的。

or()的可能重复我想我理解这个问题。如果
新建ArrayList()
本质上被视为
new ArrayList()由于类型擦除,为什么
是新的X[10]不像
新对象[10]那样处理?-反之亦然,如果Java不能处理数组,它如何处理列表?@Alan,谢谢。这就是我要问的。@Lukas Eder…我完全不同意这是一个重复的问题。我在问为什么我们可以创建一个泛型列表实例而不是泛型数组实例。