List <integer>中的差异l = new ArrayList()和List <integer> l = new ArrayList <integer>()</integer> </integer> </integer>

时间:2013-12-16 05:35:04

标签: java generics

以下两个声明有什么区别

List<Integer> l = new ArrayList(); //and 

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

如果不是那么为什么在java 7 dimond operator中引入<>以避免在'='的右侧或对象创建侧进行类型编写。< / p>

2 个答案:

答案 0 :(得分:4)

考虑这个例子

List<Float> f = new ArrayList();     // this list hold(s) Float(s).
f.add(2.0f);
List<Integer> l = new ArrayList(f);  // Oh no.... 
l.add(1);
System.out.println(l);            

如果我按上述方法运行

[2.0, 1]

如果我使用菱形运算符,我会收到编译器错误。这有帮助吗? 在运行时,由于类型擦除,每个Collection都包含java.lang.Ojbect(s),这只是编译时类型检查。

答案 1 :(得分:1)

这将导致[unchecked] warning

List<Integer> l = new ArrayList(); 

参考here