当前位置: 首页 > 知识库问答 >
问题:

菱形运算符ArrayList[重复]

彭宜人
2023-03-14

两者的区别是什么

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

ArrayList<Integer> list = new ArrayList();

当我创建一个新的ArrayList时,钻石操作员是必要的吗?

共有3个答案

茅曾琪
2023-03-14

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

第二个是ArrayList的非参数化非泛型对象,由参数化泛型引用引用。

不,尽管在创建ArrayList时不需要菱形运算符,但强烈建议以后避免ClassCastException或其他一些运行时异常

沈伟
2023-03-14

Java的一个相当高级的主题是泛型,这是对所有问题的解释

本质上,你应该一直写作

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

因为它是

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

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

写作:

ArrayList<Integer> list = new ArrayList();

创建一个可以保存任何类型的ArrayList,当您尝试将其转换为ArrayList时

编辑:

下面是关于泛型的用途和工作原理的深入指南。我不确定你是否有能力完全理解它们,但值得一试。

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

安高翰
2023-03-14

第一句话很清楚。第二个生成编译警告。

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

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

i、 e.在赋值的左侧和右侧声明泛型类型。由于泛型类型可能比仅Integer更复杂,复制两次完全相同的定义很烦人,所以他们在编译器中添加了这个很酷的功能:您只需使用

顺便说一句,最后的评论。请避免在作业和方法定义的左侧使用具体的类。以下几点要好得多:

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

甚至

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

或者经常甚至

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

 类似资料:
  • 我正在尝试使用diamond运算符,但收到以下消息: Source 1.5中不支持diamond运算符(使用Source 7或更高版本启用diamond运算符) 它在Android的netbeans中是可以修复的吗?

  • 问题内容: 我有一个类型为Patient_class的arraylist,并且用黄色下划线标出了arraylist类型,IDE提到了“新表达式中的冗余类型参数(使用菱形运算符)”。 我的问题是:我应该改用菱形运算符吗?是必须的吗?将记录存储到arraylist时,是否会丢失数据或出现其他任何问题? 这是我的数组列表: 老实说,我不知道钻石经营者实际上是什么。 问题答案: Diamond运算符的目的

  • 问题内容: Java 7中的菱形运算符允许如下代码: 但是,在Java 5/6中,我可以简单地编写: 我对类型擦除的理解是这些完全相同。(无论如何,泛型都会在运行时删除)。 问题答案: 是在左侧,你使用的是通用类型,而在右侧,你使用的是原始类型LinkedList。Java中的原始类型实际上仅存在于与前泛型代码的兼容性,并且除非绝对必要,否则绝对不能在新代码中使用。 现在,如果Java从一开始就具

  • 我在idea中编译一些简单的源代码时遇到了这个错误。 jdk是oracle的1.7.40 但是在哪里可以添加这个“-source 7”选项呢? 我尝试添加ide设置,但没有效果。

  • 来自正式的JavaJDK1。导游,我得到了这句话,但我不明白它是怎么起作用的。有人能解释一下吗?换句话说,当菱形传递空字符串时,它如何推断整数类型? 在本例中,编译器为泛型类MyClass的形式类型参数X推断类型整数。它为这个泛型类的构造函数的形式类型参数T推断类型字符串。