下面这句话的解释是什么:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList<Integer>[4];
}
}
编译器接受语句 1。编译器将语句 2 标记为“通用数组创建”。
我见过的关于禁止通用数组的一个很好的解释是this one http://www.ibm.com/developerworks/java/library/j-jtp01255.html,认为由于数组是协变的而泛型不是,如果允许泛型数组,您可以颠覆泛型类型。
抛开关于该语言是否应该在处理泛型时竭尽全力地创造这种复杂的不一致的争论,以防止你无论多么努力都不会开枪射击自己(如果有人知道关于相关的任何好的讨论)请张贴该问题的优点/缺点,我有兴趣查看这些论点),如果(2)不允许,为什么应该允许语句(1)?
这是因为你无法创造,但你可以use them:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList[4];
//statement 3
lists[0].add(new Integer(0));
//statement 4
lists[0].add(new String(""));
}
}
语句3是可以的,语句4会导致编译器错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)