【发布时间】:2017-07-21 07:22:02
【问题描述】:
嗯,这个网站上有很多关于 Java 中的原始类型和泛型的问题。甚至关于为什么下一行代码会出现警告的问题:
List<String> list = new ArrayList();
并且回答了很多次,因为 ArrayList() 是原始类型,因此编译器会发出警告,因为现在 list 不是“类型安全的”,并且编写这行代码的选项仅是为了向后兼容。
我不明白,也没有找到关于它的问题,为什么?由于编译器仅通过“查看”静态引用来编译 Java 代码,为什么编写 new ArrayList(); 而不是 new ArrayList<>(); 的编译时间会有所不同。
比如写这段代码:
List<String> list = new ArrayList(); // 1
list.add("A string"); // 2
list.add(new Object()); // 3
导致第 1 行出现编译警告,第 2 行没有编译问题,但第 3 行出现编译错误 - 类型安全。
因此 - 添加对第一行 (new ArrayList<>();) 的通用引用,只会导致编译器警告的删除。
我知道使用原始类型是一个坏习惯,但我的问题是把右手边写成原始类型有什么区别(编译警告除外)。
谢谢!
【问题讨论】:
标签: java generics compilation compiler-warnings