java为什么迭代器需要对一般定义的列表进行强制转换
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
为什么迭代器。当泛型声明与迭代器关联的列表时,next()方法需要强制转换吗
# 1 楼答案
正是因为
Iterator
在没有泛型模板类型的情况下被错误地声明为,所以Iterator.next()
结果需要强制转换如果您有一个
List<Integer>
,那么迭代器的正确类型是Iterator<Integer>
:或者,写下:
并完全避免显式迭代器
# 2 楼答案
如果想要避免强制转换,需要} 方法的javadoc,就会发现它返回一个通用版本
Iterator
的泛化版本,在本例中是Iterator<Integer>
。如果查看^{所以只需将for循环更改为
一切都会很好
{a2}说明了与您刚才遇到的相同问题。在ex1中,编译错误是由丢失的强制转换引起的,而在ex2中,这可以通过使用迭代器的通用版本来解决