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.