的Java的ListIterator /迭代器类型
问题描述:
我有一段代码如下所示:的Java的ListIterator /迭代器类型
ArrayList<Integer> a = new ArrayList<Integer>();
ListIterator<Integer> p = a.listIterator();
然而,我注意到,你并不真的需要指定为这样的ListIterator代码工作相同:
ArrayList<Integer> a = new ArrayList<Integer>();
ListIterator p = a.listIterator();
我觉得Iterator也是如此。所以我的问题是我什么时候必须指定ListIterator/Iterator的类型?是可选的,可以使用更详细吗?
答
指定迭代器的泛型类型的原因是,您可以在不投射的情况下提取它所检索的项目。这增加了一些编译时类型的安全性,没有额外的重大开销,所以我认为没有理由不这样做。
答
你所指的是generics
。这是一个非常强大的工具,它可以在编译时为您提供类型安全性。
看看Java Denerics documentation pages了解何时,为什么以及如何使用它们。
现在,回到您的例子 - 这个代码:
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.
答
了一个Iterator < T> /列表< T>提供一个类型参数的目的是类型安全,即。编译器可以在编译时检查迭代器/列表可以处理的类型与程序员期望它处理的内容之间是否存在不匹配。
例:
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
的原因下降投票? – Cemre 2012-07-15 16:53:19
反对票弃权 – 2012-07-15 16:56:58