首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ListIterator/Iterator类型

Java ListIterator/Iterator类型
EN

Stack Overflow用户
提问于 2012-07-16 00:51:12
回答 3查看 3.8K关注 0票数 3

我有一个代码片段,如下所示:

代码语言:javascript
复制
ArrayList<Integer>    a = new ArrayList<Integer>();
ListIterator<Integer> p = a.listIterator();

但是,我注意到您实际上不需要为ListIterator指定,因此代码在没有它的情况下仍然可以工作:

代码语言:javascript
复制
ArrayList<Integer>    a = new ArrayList<Integer>();
ListIterator p = a.listIterator();

我认为Iterator也是如此。所以我的问题是,什么时候必须为ListIterator/Iterator指定类型?它是不是一些可选的东西,可以更详细地使用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-16 00:55:48

为迭代器指定泛型类型的原因是,您可以提取它检索的项,而无需强制转换。这增加了一点编译时类型安全性,并且没有额外的显著开销,因此我认为没有理由不这样做。

票数 5
EN

Stack Overflow用户

发布于 2012-07-16 00:56:02

您所指的是generics。它是一个非常强大的工具,除了其他工具之外,它还为编译时的集合提供类型安全。

看看Java Denerics documentation pages,了解你应该在什么时候、为什么以及如何使用它们。

现在,回到你的例子--这段代码:

代码语言:javascript
复制
Iterator it1 = a.iterator();          
Iterator<Integer> it2 = a.iterator();

it1.next();    // Compiler will assume, that this returns `Object`
               // because you did not define the type of the collection element 
               // for the Iterator.

it2.next();    // Compiler will assume, that this returns `Integer` 
               // because you said so in declaration.
票数 2
EN

Stack Overflow用户

发布于 2012-07-16 00:56:59

为Iterator< T >/List< T>提供类型参数的目的是类型安全,即编译器可以在编译时检查迭代器/list可以处理的类型与程序员希望它处理的类型之间是否存在不匹配。

例如:

代码语言:javascript
复制
 List aList = new ArrayList();
 Iterator it = aList.iterator();
 String s = (String)it.next() //compiles even if it iterates over a list of Integers

 List<Integer> aList = new ArrayList<Integer>();
 Iterator<Integer> it = aList.iterator();
 String s = it.next() //compilation error
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11493782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档