对象类型的隐式decleration与显式泛化decleration之间的差异

时间:2015-12-09 13:45:17

标签: java object generics type-safety

我无法理解下面两个代码段之间的区别。有人可以帮我解释一下吗? 什么时候应该使用它们?

如果有人可以通过简单的解释帮助我,我会很感激。

//1
List list1=new ArrayList();
for(Object obj:list1){}

//2
List<Object>list2=new ArrayList();
for(Object obj:list2){}

2 个答案:

答案 0 :(得分:1)

泛型附带Java5,其主要思想是避免众所周知的异常ClassCastException。在您的示例中,在Java5之前,我们习惯于迭代对象集合并在运行时将其强制转换,因此上面提到的异常经常发生。

使用Generics,这种运行时异常成为编译时异常,您可以尽早意识到这些错误。在您的示例中,您可以选择是否要将此情况作为运行时错误(选项1)或编译错误(选项2)处理,并意识到在选项2中处理它的难易程度。

泛型不仅仅是隐式或显式声明,你应该看看这个tutorial

答案 1 :(得分:0)

ListList<Object>相似(因为你可以为它们添加任何类型)但不同的东西。

List是原始类型,我可以说List l =new ArrayList<Integer>()List l =new ArrayList()

但对于List<Object>,我只能指定List Object类型的实施。我不能说List<Object> l = new ArrayList<Integer>();