Как обратиться к текущему объекту в итераторе
Для записи API Iterator
не позволяет вам это делать.Нет понятия «текущий» объект.Метод Iterator.next()
дает вам следующий объект ... и движется дальше.
(Методы ListIterator.previous()
и ListIterator.next()
аналогичны. Обратите внимание, что в случае ListIterator
поведение метода задокументировано в виде курсора, который обозначает позицию до / между / после элементов в последовательностиповторяется.)
Решение состоит в том, чтобы присвоить результат вызова it.next()
временной переменной, как описано в принятом ответе.
Не знаю точнопочему разработчики не включили понятие «текущий» объект в API, но я могу подумать о нескольких причинах:
- Это сделало бы типичный объект итератора больше;т. е. дополнительное поле для хранения текущего объекта.
- Это означало бы, что еще один метод для реализации класса Iterator должен быть реализован.
- Понятие текущего объекта плохо согласуется с «курсором»."модель, задокументированная в интерфейсе
ListIterator
... и подразумеваемая текущим дизайном Iterator
. - Существует небольшая проблема, связанная с тем, что Iterator" зависает "на текущем объекте, тем самым не давая ему быть GC'ed.
- В подавляющем большинстве случаев использования итераторов не требуется текущий объект.
- Существуют и другие способы решения этой проблемы.
Звучиткак хороший звонок ...