之间有什么区别
ArrayList<Integer> list = new ArrayList<>();
和
ArrayList<Integer> list = new ArrayList();
当我创建新的ArrayList时,是菱形运算符吗?
答案 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>
时,编译器将发出警告。
编辑:
以下是有关仿制药的用途和工作原理的深入指南。我不确定你是否已达到完全理解它们的水平,但值得一试。
答案 2 :(得分:0)
首先是ArrayList
的参数化通用对象,由参数化通用引用引用。
其次是ArrayList
的非参数化非泛型对象,由参数化通用引用引用。
不,虽然在创建ArrayList
时不需要使用钻石操作符,但强烈建议稍后避免使用ClassCastException
或其他RuntimeException
。