Il ne fait pas de sens pour Enumeration
à mettre en oeuvre Iterable
. Iterable
est une méthode de fabrique pour Iterator
. Enumeration
est analogue à l' Iterator
, et seulement maintient l'état pour une simple énumération.
Alors, soyez prudent d'essayer d'envelopper un Enumeration
comme Iterable
. Si quelqu'un me passe un Iterable
, je suppose que je peux appeler iterator()
sur à plusieurs reprises, créant autant de Iterator
instances que je veux, et l'itération de façon indépendante sur chaque. Un enveloppé Enumeration
ne respecte pas ce contrat; ne laissez pas votre enveloppé Enumeration
s'échapper de votre propre code. (En aparté, j'ai remarqué que Java 7 DirectoryStream
viole les attentes de cette manière, et ne devrait pas être autorisé à "s'échapper".)
Enumeration
, c'est comme un Iterator
, pas un Iterable
. Un Collection
est Iterable
. Un Iterator
ne l'est pas.
Vous ne pouvez pas faire ceci:
Vector<X> list = …
Iterator<X> i = list.iterator();
for (X x : i) {
x.doStuff();
}
Donc il ne serait pas logique pour ce faire:
Vector<X> list = …
Enumeration<X> i = list.enumeration();
for (X x : i) {
x.doStuff();
}
Il n'y a pas d' Enumerable
équivalent à Iterable
. Il peut être ajouté sans casser quoi que ce soit pour travailler dans les boucles for, mais à quoi servirait-il? Si vous êtes en mesure de mettre en œuvre ce nouveau Enumerable
interface, pourquoi ne pas simplement mettre en oeuvre Iterable
à la place?