class ZiggyTest{
public static void main(String[] args){
List<Integer> list = new LinkedList<Integer>();
list.add(4);
list.add(5);
list.add(-5);
for(Iterator i = list.iterator(); i.hasNext();){
Integer in = i.next();
System.out.println(in);
}
}
}
上面的代码示例导致以下编译器错误:
ZiggyTest.java:17: incompatible types
found : java.lang.Object
required: java.lang.Integer
Integer in = i.next();
^
1 error
为什么 Iterator.next() 方法需要转换,当与 Iterator 关联的列表被一般声明时?
最佳答案
Iterator.next()
结果需要强制转换,因为 Iterator
在没有通用模板类型的情况下被错误声明。
如果你有一个 List<Integer>
那么迭代器的正确类型是 Iterator<Integer>
:
for (Iterator<Integer> i = list.iterator(); i.hasNext(); ) {
Integer in = i.next();
System.out.println(in);
}
或者,写:
for (Integer in: list) {
System.out.println(in);
}
并完全避免显式迭代器。
关于java - 为什么迭代器需要对一般定义的列表进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688812/