2013-12-16 64 views
0

是什么在以下两个声明差异列表<Integer>升=新的ArrayList()和List<Integer>升=新的ArrayList <integer>()

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

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

如果没有那么为什么在Java 7中dimond operator<>是引入以避免在'='的右侧或在对象创建侧的类型书写。

+0

Dublicate问题: http://stackoverflow.com/questions/4166966/what-is-the-point-of-the- diamond-operator-in-java-7 – Murali

+1

@nbroos你所描述的是变量类型声明的类型参数,而不是构造函数。 –

回答

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

这将导致[unchecked] warning

List<Integer> l = new ArrayList(); 

参考here

+0

ohh..my netbeans不显示该警告。如何在netbeans中设置以启用显示警告 –

+1

转到工具>选项>编辑器>提示选择Java下的是.. – Nambi

相关问题