在java中创建新ArrayList的两种方法

在java中创建新ArrayList的两种方法,java,Java,通常,如果元素是字符串,我可以用这种方式新建ArrayList: List<String> list = new ArrayList<String>(); 但是,我找到了一种新的方法: List<String> list = new ArrayList<>(); 如果列表中的元素是复杂类型的,那么第二种方法似乎可以节省很多代码 它们之间有什么区别?是的,Java编译器1.7版之前不支持第二个版本 因此,如果您希望源代码可以使用JDK1.6进行编

通常,如果元素是字符串,我可以用这种方式新建ArrayList:

List<String> list = new ArrayList<String>();
但是,我找到了一种新的方法:

List<String> list = new ArrayList<>();
如果列表中的元素是复杂类型的,那么第二种方法似乎可以节省很多代码


它们之间有什么区别?

是的,Java编译器1.7版之前不支持第二个版本

因此,如果您希望源代码可以使用JDK1.6进行编译,它就不能使用新语法

List<String> list = new ArrayList<>();
这是Java 7中引入的一个非正式称为菱形运算符的示例


为了代码的简洁,我们鼓励您在Java 7或更高版本上使用它。

类型推断是在第二种样式JDK 1.7中添加的

如果列表中的元素是复杂类型的,那么第二种方法似乎可以节省很多代码

如果您使用的是1.7或+,它会自动推断,这意味着ArrayList会获取其声明列表的类型


被称为菱形运算符,菱形运算符的目的是简化泛型类的实例化。

如果我没有错的话,我认为它被称为自动类型推断。为便于将来参考,您可以阅读Java发行说明,了解每个发行版中都做了哪些语言更改;那么你不必对谷歌感到惊讶:Java7的变化,Java8的变化,等等。。从经验上讲,您节省的代码量实际上并没有那么大;这是一种方便,而不是改变游戏规则。我同意Gimby的观点,请阅读Java8的发行说明。还有一些东西,比如Java8中支持的Lambda表达式,这在Java8之前是不可用的。此外,他们对Java8的安全性进行了重大更改。它导致许多应用程序在大型系统中失败,因此许多供应商不支持Java8,但这是值得的。现在Jigsaw项目正在开发中,并将在Java9中确认这一点。