【发布时间】:2010-10-02 23:33:38
【问题描述】:
下面的解释是什么:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList<Integer>[4];
}
}
编译器接受语句 1。编译器将语句 2 标记为“创建通用数组”。
我看到的关于禁止泛型数组的一个很好的解释是this one,认为由于数组是协变的,而泛型不是,如果允许泛型数组,则可以颠覆泛型类型。
撇开关于语言是否应该竭尽全力在泛型处理中制造这种复杂的不一致的争论,以防止您无论多么努力都不会开枪(如果有人知道任何好的讨论)关于问题的相对优点/缺点,请发布,我有兴趣查看论点),如果(2)不是,为什么要允许声明(1)?
【问题讨论】: