In base alla seguente definizione (pre 1.8) di Iterable ,
package java.lang;
import java.util.Iterator;
public interface Iterable<T> {
Iterator<T> iterator();
}
Direi che, Iterable dipende dall'interfaccia Iterator come mostrato di seguito,
package java.util;
public interface Iterator<E> {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
}
La raccomandazione standard è che qualsiasi implementazione che implementa l'interfaccia Iterable diventa iterabile.
Ma sintatticamente, MyClass può implementare l'interfaccia Iterator e abilitare l'implementazione MyClass come iterabile senza menzionare esplicitamente class MyClass **implements Iterable**{} , aggiungendo Iterator<T> iterator(); comportamento in Iterator interfaccia anziché Iterable interfaccia. Ciò sarebbe stato semplificato presentando solo un'interfaccia ( Iterator ). Iterator può contenere tutte le responsabilità che Iterable fa.
Quindi, qual è la ragione dietro l'aggiunta del comportamento di Iterator<T> iterator(); nell'interfaccia Iterable (ridondante) invece dell'interfaccia Iterator ?
Non sono chiaro con lo scopo di introdurre l'interfaccia Iterable .
Per favore aiutami a capire.
Per me, questa non è una domanda duplicata perché questo è un risposta che parla della violazione di SRP.