Java 泛型和数组初始化
对以下内容的解释是什么:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList<Integer>[4];
}
}
编译器接受语句 1。编译器将语句 2 标记为“创建泛型数组”。
我看到的关于不允许泛型数组的一个很好的解释是这个,它认为由于数组是协变的,而泛型不是,如果你允许泛型数组,你可以颠覆泛型类型。
撇开关于语言是否应该在通用码的处理中造成这种复杂的不一致的极端争论,以防止你开枪自杀,无论你多么努力(如果有人知道关于这个问题的相对优点/缺点的任何良好讨论,请发布, 我有兴趣看看参数),如果(2)不是,为什么语句(1)应该被允许?