Итератор повторяемого объекта должен возвращать сам повторяемый объект в Java - PullRequest
1 голос
/ 23 января 2020

Предположим, вы указали класс в Java, который расширяет интерфейс Iterable. Этот класс должен предоставить Iterator, который должен возвращать экземпляр окружающего класса, взгляните на метод main.

public class Test implements Iterable<Test> {

    @Override
    public Iterator<Test> iterator() {

        return new Iterator<Test>() {
          private boolean onlyOnce = false;

            @Override
            public boolean hasNext() {
                return false;
            }

            @Override
            public Test next() {         
               if (!onlyOnce) {
                 onlyOnce = true;
                 // TODO return
               } 
               throw new NoSuchElementException("Iterator has already been called");
            }
        };
    }
    public static void main(String[] args) {

        Test test = new Test();
        Test test2 = test.iterator().next();

        boolean b = test == test2; // should be true
    }

}

Как решить эту проблему в Java?

1 Ответ

4 голосов
/ 23 января 2020

Чтобы вернуть включающий экземпляр Test, используйте квалифицированное выражение this:

return Test.this;

Однако гораздо более удачным способом реализации метода было бы использование существующей реализации итератора:

@Override
public Iterator<Test> iterator() {
  return Arrays.asList(this).iterator();
  // or Collections.singleton(this).iterator()
  // or Stream.of(this).iterator()
  // or many other possibilities.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...