以下是相应的解释:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList<Integer>[4];
}
}
编译器接受语句1。编译器会标记语句2为“通用数组创建”。关于禁止使用通用数组的一个好解释是这篇文章,认为由于数组是协变的,而泛型则不是,如果允许通用数组,则可以破坏通用类型。无论如何,撇开争论是否应该采取极端措施来创建这种复杂的不一致性以防止出现问题(如果有人知道任何有关此问题的优缺点的好讨论,请发布,我会很感兴趣),为什么语句1能够被允许而语句2不能?