两者的区别是什么
ArrayList<Integer> list = new ArrayList<>();
和
ArrayList<Integer> list = new ArrayList();
当我创建一个新的ArrayList时,钻石操作员是必要的吗?
首先是参数化的泛型对象ArrayList
,由参数化的泛型引用引用。
第二个是ArrayList
的非参数化非泛型对象,由参数化泛型引用引用。
不,尽管在创建ArrayList
时不需要菱形运算符,但强烈建议以后避免ClassCastException
或其他一些运行时异常
。
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/
第一句话很清楚。第二个生成编译警告。
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推断类型字符串。