import java.util.*;
public class Test{
Test(){
main();
}
List test = new ArrayList();
public void main(){
test.add(new Square(10));
Iterator i = test.iterator();
while(i.hasNext()){
Square temp = i.next();
}
}
}
答案 0 :(得分:6)
是的 - 您没有在任何地方使用泛型,因此就编译器而言i.next();
只是返回Object
。
选项:
转换为Square
:
Square temp = (Square) i.next();
就我个人而言,我赞成使用泛型 - 在可以的情况下使用类型安全性更好:)
// Not clear why this is an instance variable - and please make fields private :)
List<Square> test = new ArrayList<Square>();
public void main() {
test.add(new Square(10));
Iterator<Square> i = test.iterator();
while(i.hasNext()) {
Square temp = i.next();
// Use square here
}
}
两个旁白:
增强的for
循环可以替换你的while循环:
for (Square square : test)
有一个名为main
的实例方法没有参数,这很奇怪;拥有public static void main(String[] args)
更为常见。关于你在这里所做的事情,没有什么不合法的,只是奇怪的。
答案 1 :(得分:1)
您应该使用generic类型List<Square>
,ArrayList<Square>
和Iterator<Square>
来避免这种情况。
如果不这样做,编译器就无法“知道”test
中的实际元素类型,并且它“认为”它们属于Object
类型。
List<Square> test = new ArrayList<Square>();
public void main(){
test.add(new Square(10));
Iterator<Square> i = test.iterator();
while(i.hasNext()){
Square temp = i.next();
}
}
答案 2 :(得分:1)
你必须施展到Square
:
while(i.hasNext()){
Square temp = (Square) i.next();
}
迭代器只返回Object
类型元素。
使用Java 1.5+和泛型,我们可以不进行强制转换:
// a list, that will only accept Square instances
List<Square> test = new ArrayList<Square>();
public void main(){
test.add(new Square(10));
Iterator<Square> i = test.iterator();
while(i.hasNext()){
Square temp = i.next();
}
}