Diamond运算符ArrayList

时间:2015-05-05 08:47:46

标签: java arraylist

之间有什么区别
ArrayList<Integer> list = new ArrayList<>();

ArrayList<Integer> list = new ArrayList();

当我创建新的ArrayList时,是菱形运算符吗?

3 个答案:

答案 0 :(得分:6)

第一个陈述很清楚。第二个生成编译警告。

Diamond iperator被引入java 1.7。从java 1.5开始,你必须写

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

即。在赋值的左侧和右侧声明泛型类型。由于泛型类型可能比Integer更复杂,因此将两次完全相同的定义复制起来很烦人,所以他们将这个很酷的特性添加到编译器中:你只需说:“这个类是通用的,使用泛型类型从作业的左侧“使用<>标记。

顺便提一下最后的评论。请避免在赋值和方法定义的左侧使用具体类。 以下是更好的:

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

甚至

Collection<Integer> list = new ArrayList<>();

或甚至经常

Iterable<Integer> list = new ArrayList<>();

答案 1 :(得分:1)

Java的一个相当高级的主题叫做 Generics ,这是所有&lt;&gt;的解释。符号。

本质上,你应该总是写

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

因为它是

的简写
ArrayList<Integer> list = new ArrayList<Integer>();

你需要两个类型参数(位)匹配,否则编译器会给你一个警告。

写作:

ArrayList<Integer> list = new ArrayList();

创建一个可以包含任何类型的ArrayList,当您尝试将其转换为ArrayList<Integer>时,编译器将发出警告。

编辑:

以下是有关仿制药的用途和工作原理的深入指南。我不确定你是否已达到完全理解它们的水平,但值得一试。

https://docs.oracle.com/javase/tutorial/java/generics/

答案 2 :(得分:0)

首先是ArrayList的参数化通用对象,由参数化通用引用引用。

其次是ArrayList的非参数化非泛型对象,由参数化通用引用引用。

不,虽然在创建ArrayList时不需要使用钻石操作符,但强烈建议稍后避免使用ClassCastException或其他RuntimeException