4

我无法理解为什么 java 编译器允许将非特定集合分配给已指定变量的集合。像这样:

    ArrayList list = new ArrayList();
    // Operations on list
    ArrayList<String> stringList = list;

这可能会出现各种类型的转换错误,在我看来,如果编译器首先阻止你这样做会更有意义。

我只是问,因为我对语言的这个有点奇怪的方面感到好奇,我实际上并没有遇到让代码工作的问题(尽管有一天我可能需要使用带有各种类的 ArrayList它)。

4

2 回答 2

6

它仅用于支持泛型或 java 5 之前的遗留代码。

泛型,引入Java SE 5和 Collection 很久以前就一直在运行。因此,如果您在 1.5 之前看到 Collection 框架,您会看到ArrayList,没有generic.

于 2012-10-10T08:56:24.523 回答
2

由于使用原始类型(例如,没有泛型参数的 ArrayList)如果不抑制会导致警告,您还可以考虑使用“-Werror”标志来“警告失败”:

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

(虽然就个人而言,我还没有使用过这个标志)

于 2012-10-10T10:50:09.277 回答