ArrayList array = new ArrayList();
Iterator it1 = array.iterator();
while (it1.hasNext()){
Myclass temp = it1.myGetterMethod();
System.out.println (temp);
}
这是我想要实现的,但Iterator只返回一个通用的Object。当我致电Object.getClass()
时,该课程为Myclass
。这是否意味着Iterator不是通用的,每当我迭代非Java字符串等对象时,我都需要扩展Iterator类?
答案 0 :(得分:7)
您没有创建通用的ArrayList。
尝试
ArrayList<MyClass> array = new ArrayList<MyClass>();
Iterator<MyClass> it1 = array.iterator();
while (it1.hasNext())
{
MyClass temp = it1.myGetterMethod();
System.out.println (temp);
}
答案 1 :(得分:5)
最好使用for语句,因此隐藏迭代器的复杂性。它更容易阅读
for (MyClass temp: array )
{
System.out.println (temp);
}
答案 2 :(得分:4)
你的代码遗漏了一些重要的东西,但你要做的第一件事是要么转换Iterator.next()调用返回的值(代码中缺少),要么使用泛型让编译器为你排序
这两种选择看起来像这样(没有尝试编译它们但它们应该大部分是正确的):
使用演员:
ArrayList array = new ArrayList();
...
Iterator it1 = array.iterator();
while (it1.hasNext()){
Myclass temp = (Myclass)it1.next()
System.out.println (temp);
}
使用泛型:
ArrayList<Myclass> array = new ArrayList<Myclass>();
...
Iterator<Myclass> it1 = array.iterator();
while (it1.hasNext()){
Myclass temp = it1.next()
System.out.println (temp);
}
编辑:正如其他人所指出的那样,在大多数情况下,使用foreach结构是为了提高可读性。我决定尽可能少地修改你的初始代码。 for构造看起来像这样:
ArrayList<Myclass> array = new ArrayList<Myclass>();
...
for(Myclass temp : array){
System.out.println (temp);
}