Enumeration
实施没有意义Iterable
。Iterable
是一个工厂方法Iterator
。Enumeration
类似于Iterator
,并且仅维护单个枚举的状态。
因此,尝试将 an 包装Enumeration
为Iterable
. 如果有人传给我一个Iterable
,我会假设我可以iterator()
反复调用它,创建任意数量的Iterator
实例,并在每个实例上独立迭代。一个包裹的Enumeration
将不履行本合同;不要让您的包裹Enumeration
从您自己的代码中逃脱。(顺便说一句,我注意到 Java 7DirectoryStream
以这种方式违反了预期,也不应该被允许“逃脱”。)
Enumeration
就像一个Iterator
,而不是一个Iterable
。一个Collection
是Iterable
。一个Iterator
不是。
你不能这样做:
Vector<X> list = …
Iterator<X> i = list.iterator();
for (X x : i) {
x.doStuff();
}
所以这样做没有意义:
Vector<X> list = …
Enumeration<X> i = list.enumeration();
for (X x : i) {
x.doStuff();
}
没有Enumerable
等价于Iterable
。它可以在不破坏任何东西的情况下添加到 for 循环中,但有什么意义呢?如果你能够实现这个新Enumerable
接口,为什么不直接实现Iterable
呢?