It doesn't make sense for Enumeration
to implement Iterable
. Iterable
is a factory method for Iterator
. Enumeration
is analogous to Iterator
, and only maintains state for a single enumeration.
So, be careful trying to wrap an Enumeration
as an Iterable
. If someone passes me an Iterable
, I will assume that I can call iterator()
on it repeatedly, creating as many Iterator
instances as I want, and iterating independently on each. A wrapped Enumeration
will not fulfill this contract; don't let your wrapped Enumeration
escape from your own code. (As an aside, I noticed that Java 7's DirectoryStream
violates expectations in just this way, and shouldn't be allowed to "escape" either.)
Enumeration
is like an Iterator
, not an Iterable
. A Collection
is Iterable
. An Iterator
is not.
You can't do this:
Vector<X> list = …
Iterator<X> i = list.iterator();
for (X x : i) {
x.doStuff();
}
So it wouldn't make sense to do this:
Vector<X> list = …
Enumeration<X> i = list.enumeration();
for (X x : i) {
x.doStuff();
}
There is no Enumerable
equivalent to Iterable
. It could be added without breaking anything to work in for loops, but what would be the point? If you are able to implement this new Enumerable
interface, why not just implement Iterable
instead?