zig*_*ggy 1 java oop generics collections
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码示例导致以下编译器错误:
ZiggyTest.java:17: incompatible types
found : java.lang.Object
required: java.lang.Integer
Integer in = i.next();
^
1 error
Run Code Online (Sandbox Code Playgroud)
当与Iterator关联的List一般被声明时,为什么Iterator.next()方法需要强制转换?
Aln*_*tak 16
该Iterator.next()结果需要正是因为铸Iterator被错误地宣称没有一个通用的模板类型.
如果你有一个List<Integer>正确的迭代器类型是Iterator<Integer>:
for (Iterator<Integer> i = list.iterator(); i.hasNext(); ) {
Integer in = i.next();
System.out.println(in);
}
Run Code Online (Sandbox Code Playgroud)
或者,写:
for (Integer in: list) {
System.out.println(in);
}
Run Code Online (Sandbox Code Playgroud)
并完全避免使用显式迭代器.