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呢?