为什么我不能在Iterator上调用特定的类方法?

时间:2010-02-19 22:03:03

标签: java class iterator arraylist generics

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类?

3 个答案:

答案 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);
}