【发布时间】:2015-07-14 21:41:25
【问题描述】:
有什么区别
ArrayList<Integer> list = new ArrayList<>();
和
ArrayList<Integer> list = new ArrayList();
新建ArrayList时是否需要使用菱形运算符?
【问题讨论】:
有什么区别
ArrayList<Integer> list = new ArrayList<>();
和
ArrayList<Integer> list = new ArrayList();
新建ArrayList时是否需要使用菱形运算符?
【问题讨论】:
Java 的一个相当高级的主题称为泛型,这就是对所有 符号的解释。
本质上,你应该总是写
ArrayList<Integer> list = new ArrayList<>();
因为它是简写
ArrayList<Integer> list = new ArrayList<Integer>();
并且你需要两个类型参数(位)来匹配,否则编译器会给你一个警告。
写作:
ArrayList<Integer> list = new ArrayList();
创建一个可以容纳任何类型的 ArrayList,当您尝试将其转换为 ArrayList<Integer> 时,编译器会抛出警告。
编辑:
这里是关于泛型的用途和工作原理的深入指南。我不确定你是否达到了完全理解它们的水平,但值得一试。
【讨论】:
首先是ArrayList的参数化泛型对象,由参数化泛型引用引用。
Second 是ArrayList 的非参数化非泛型对象,由参数化泛型引用引用。
不,虽然在创建ArrayList 时不需要菱形运算符,但强烈建议稍后避免使用ClassCastException 或其他一些RuntimeException。
【讨论】:
第一句话很清楚。第二个生成编译警告。
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<>();
【讨论】:
Please avoid using concrete classes in the left side of assignments and method definitions. The following is much better:... 请为什么,谢谢