Почему я не могу вызвать определенные методы класса для Итератора? - PullRequest
0 голосов
/ 20 февраля 2010
ArrayList array = new ArrayList();

Iterator it1 = array.iterator();
while (it1.hasNext()){
   Myclass temp = it1.myGetterMethod();
   System.out.println (temp);
}

Это то, что я хотел бы реализовать, но Iterator возвращает только универсальный объект. Когда я звоню Object.getClass(), класс Myclass. Означает ли это, что Iterator не является универсальным, и мне нужно расширять класс Iterator всякий раз, когда я перебираю объекты, которые не являются строками Java и т. Д.?

Ответы [ 3 ]

7 голосов
/ 20 февраля 2010

Вы не создали универсальный ArrayList.

Попробуйте

ArrayList<MyClass> array = new ArrayList<MyClass>();

Iterator<MyClass> it1 = array.iterator(); 
while (it1.hasNext())
{ 
    MyClass temp = it1.myGetterMethod(); 
    System.out.println (temp); 
}
5 голосов
/ 20 февраля 2010

Лучше использовать оператор for и таким образом скрыть сложности итераторов. Гораздо проще читать

for (MyClass temp: array )
  {
  System.out.println (temp);
  }
4 голосов
/ 20 февраля 2010

Ваш код пропускает несколько важных вещей, но первое, что вы хотите сделать, это либо привести значение, возвращаемое вызовом 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);
}
...