我无法理解为什么java编译器允许为非特定集合分配已指定变量的集合。像这样:
ArrayList list = new ArrayList();
// Operations on list
ArrayList<String> stringList = list;
在这种情况下可能存在各种类型的转换错误,在我看来,如果编译器阻止您首先执行此操作会更有意义。
我只是在问,因为我很好奇这个语言的这个有点奇怪的方面,我实际上并没有让代码工作有困难(虽然我可能有一天我需要使用各种类型的ArrayList其中的课程。)
答案 0 :(得分:6)
它仅用于在泛型或java 5之前支持遗留代码。
在Java SE 5
和Collection中引入的泛型一直在运行。因此,如果您在1.5之前看到Collection框架,则会看到ArrayList,但没有generic
。
答案 1 :(得分:2)
由于使用原始类型(例如没有泛型参数的ArrayList)会导致警告(如果没有被抑制),您还可以考虑使用“-Werror”标志来“警告失败”:
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
(虽然就个人而言,我还没有使用过这面旗帜)