我无法理解下面两个代码段之间的区别。有人可以帮我解释一下吗? 什么时候应该使用它们?
如果有人可以通过简单的解释帮助我,我会很感激。
//1
List list1=new ArrayList();
for(Object obj:list1){}
//2
List<Object>list2=new ArrayList();
for(Object obj:list2){}
答案 0 :(得分:1)
泛型附带Java5,其主要思想是避免众所周知的异常ClassCastException。在您的示例中,在Java5之前,我们习惯于迭代对象集合并在运行时将其强制转换,因此上面提到的异常经常发生。
使用Generics,这种运行时异常成为编译时异常,您可以尽早意识到这些错误。在您的示例中,您可以选择是否要将此情况作为运行时错误(选项1)或编译错误(选项2)处理,并意识到在选项2中处理它的难易程度。
泛型不仅仅是隐式或显式声明,你应该看看这个tutorial。
答案 1 :(得分:0)
List
和List<Object>
相似(因为你可以为它们添加任何类型)但不同的东西。
List
是原始类型,我可以说List l =new ArrayList<Integer>()
或List l =new ArrayList()
。
但对于List<Object>
,我只能指定List
Object
类型的实施。我不能说List<Object> l = new ArrayList<Integer>();
。