ArrayList的以下两个声明有什么不同?
ArrayList<Integer> nunbers = new ArrayList<Integer>();
VS
ArrayList<Integer> nunbers = new ArrayList<>();
他们中的一个比另一个更受欢迎吗?
答案 0 :(得分:23)
第二个类型参数 inferred ,这是Java 7中的新功能。<>
称为“the diamond”。
另请注意type inference itself is not new in Java,但是为实例化的通用类推断它的能力是新的。
Java SE 7之前版本的编译器能够推断通用构造函数的实际类型参数,类似于泛型方法。但是,如果使用菱形(&lt;&gt;),Java SE 7及更高版本中的编译器可以推断出要实例化的泛型类的实际类型参数。
我会说第二个可能是首选的,只要你能确保代码只需要在Java 7上运行,因为它更清晰,只能减少冗余信息。
答案 1 :(得分:4)
第二个减少了代码混乱,它在java 7中是新的。但是你的代码应该是
List<Integer> nunbers = new ArrayList<>();
由于您可以对接口List
进行编码,因此可以推断出实现ArrayList
的类型参数。
答案 2 :(得分:3)
如果您的java编译器的版本低于1.7,则第二个不会编译。
答案 3 :(得分:2)
最后一个是可以与Java 7或更高版本一起使用的快捷方式。
答案 4 :(得分:2)
他们将编译为完全相同的代码,因为Java 7的第二件事只是你可以使用的快捷方式,因为它是100%清楚属于<>
你可以留空的