Iterable<E>在java.lang而Iterator<E>在java.util。这是否有充分的理由,或者这仅仅是糟糕设计的产物?
这似乎很奇怪,因为唯一有用的Iterable<E>是提供一个Iterator<E>.
编辑:一个潜在的原因是因为(当时)新引入的 for-each 循环。我想我的问题是,它们是等价的吗?
for(Object o : collection)
...
vs
for( Iterator iter = collection.iterator(); iter.hasNext(); ) {
o = iter.next();
...
如果它们是,那么这仍然不能解释为什么这两个类在不同的包中,因为编译器无论如何都必须导入java.util才能使用该Iterator构造。