¿Es un iterador “infinito” un mal diseño? [cerrado]

¿Se considera generalmente una mala práctica proporcionarIterator implementaciones que son "infinitas"; es decir, a dónde llamahasNext() siempre (*) devuelve verdadero?

Por lo general, diría "sí" porque el código de llamada podría comportarse de manera errática, pero en la implementación a continuaciónhasNext() devolverá verdadero a menos que la persona que llama elimine todos los elementos de la Lista con la que se inicializó el iterador; es decirhay una condición de terminación. ¿Crees que este es un uso legítimo deIterator? No parece violar el contrato, aunque supongo que se podría argumentar que no es intuitivo.

public class CyclicIterator<T> implements Iterator<T> {
  private final List<T> l;
  private Iterator<T> it;

  public CyclicIterator<T>(List<T> l) {
    this.l = l;
    this.it = l.iterator();
  }

  public boolean hasNext() {
    return !l.isEmpty();
  }

  public T next() {
    T ret;

    if (!hasNext()) {
      throw new NoSuchElementException();
    } else if (it.hasNext()) {
      ret = it.next();
    } else {
      it = l.iterator();
      ret = it.next();
    }

    return ret;
  }

  public void remove() {
    it.remove();
  }
}

(Pedantic) EDITAR

Algunas personas han comentado cómo unIterator podría usarse para generar valores a partir de una secuencia ilimitada como la secuencia de Fibonacci. Sin embargo, el JavaIterator La documentación indica que un iterador es:

Un iterador sobre una colección.

Ahora podría argumentar que la secuencia de Fibonacci es una colección infinita, pero en Java equipararía la colección con eljava.util.Collection interfaz, que ofrece métodos comosize() lo que implica que una colección debe estar limitada. Por lo tanto, ¿es legítimo usarIterator como generador de valores a partir de una secuencia ilimitada?

Respuestas a la pregunta(11)

Su respuesta a la pregunta