【问题标题】:What is the difference between "new ArrayList<ClassName>()" and "new ArrayList<>()" when constructing an ArrayList?构造 ArrayList 时,“new ArrayList<ClassName>()”和“new ArrayList<>()”有什么区别?
【发布时间】:2018-05-02 20:18:51
【问题描述】:
这是一个具体的例子:
ArrayList<String> x = new ArrayList<String>();
ArrayList<String> y = new ArrayList<>();
这两种方法似乎都可以正常工作。有什么区别?
【问题讨论】:
标签:
java
generics
arraylist
constructor
【解决方案1】:
构建时:
new ArrayList<>();
你告诉编译器Infer左侧的类型。
现在:
new ArrayList<String>();
明确声明您打算使用的类型。
【解决方案2】:
没有区别,我可以称之为新功能。
我们必须在 Java 7 之前指定类型参数:
ArrayList<String> x = new ArrayList<String>();
从 Java 7 开始,我们可以只使用 Diamond:
ArrayList<String> y = new ArrayList<>();
这就是区别,Java 的设计者想让它变得更容易。
【解决方案3】:
如果我记得我早期的编程课程,这是一个 syntactical sugar 特性的例子,它被添加到一个较新的 java 版本中。当你实例化 y 时,Java 会推断你的类型 String。