Реализация Iterable против реализации Iterator - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть объект, в который я хотел бы реализовать пользовательскую итерацию, но:

  • Я не хочу создавать все следующие шаблоны одновременно.
  • Я хочу, чтобы он работал в расширенных циклах for, но я не хочу создавать вторичный объект Iterator для всей действительной итерации, поскольку для итерации требуется доступ к закрытому полю.
  • Я хочу требовать создания второго объекта, а не второго итератора.

Поэтому мое решение заключалось в том, чтобы реализовать как Iterator, так и Iterable, и включить следующий методв моей реализации:

@Override
public java.util.Iterator iterator() {
    return this;
}

Это нормально, практика?Если это не так, что я должен сделать, чтобы правильно обойти эту проблему?

1 Ответ

2 голосов
/ 24 сентября 2019

Это не нормальная практика.Создайте вторичный Iterator объект и сделайте этот Iterator вложенный класс внутри вашего текущего класса, что позволит ему получить доступ к приватным полям.

В общем, попытка сделать вашОбъект Iterable и Iterator в одно и то же время очень вероятно может запутать пользователей и нарушить код, который делает предположения о том, как работает Iterable, в частности, что его можно использовать более одного раза.

...