17

ArrayList 的以下两个声明有什么区别?

ArrayList<Integer> nunbers = new ArrayList<Integer>();

对比

ArrayList<Integer> nunbers = new ArrayList<>();

其中一个比另一个更受欢迎吗?

4

5 回答 5

26

第二个有它的类型参数推断,这是Java 7中的一个新事物。<>被称为“钻石”。

另请注意,类型推断本身在 Java 中并不新,但为正在实例化的泛型类推断它的能力是新的。

Java SE 7 之前版本的编译器能够推断泛型构造函数的实际类型参数,类似于泛型方法。但是,如果您使用菱形 (<>),Java SE 7 及更高版本中的编译器可以推断出正在实例化的泛型类的实际类型参数。

我想说第二个可能是首选,只要您可以确保代码只需要在 Java 7 上运行,因为它更清晰,并且只会减少冗余信息。

于 2013-04-26T19:07:50.370 回答
4

第二个减少了代码混乱,它是 java 7 中的新功能。但是你的代码应该是

List<Integer> nunbers = new ArrayList<>();

由于您可以对接口进行编码,因此推断List实现的类型参数。ArrayList

于 2013-04-26T19:09:47.930 回答
3

如果您的 java 编译器版本低于 1.7,则第二个将无法编译。

于 2013-04-26T19:07:08.110 回答
3

最后一个是可用于 Java 7 或更高版本的快捷方式。

于 2013-04-26T19:07:58.693 回答
3

它们将编译成完全相同的代码,因为 Java 7 的第二件事只是您可以使用的快捷方式,因为它 100% 清楚属于什么,<>您可以将其留空

于 2013-04-26T19:10:15.993 回答