一尘不染

为什么Java的Iterator不可迭代?

java

为什么Iterator接口不扩展Iterable

iterator()方法可以简单地返回this

是故意的还是对Java设计师的监督?

能够将for-each循环与这样的迭代器一起使用将很方便:

for(Object o : someContainer.listSomeObjects()) {
    ....
}

其中listSomeObjects()返回迭代器。


阅读 357

收藏
2020-03-19

共2个答案

一尘不染

因为迭代器通常指向集合中的单个实例。Iterable意味着可以从一个对象获得迭代器以遍历其元素-无需迭代单个实例(迭代器代表的是该实例)。

2020-03-19
一尘不染

迭代器是有状态的。这个想法是,如果您调用Iterable.iterator()两次,您将获得独立的迭代器-无论如何对于大多数可迭代对象。在您的方案中显然不是这种情况。

例如,我通常可以这样写:

public void iterateOver(Iterable<String> strings)
{
    for (String x : strings)
    {
         System.out.println(x);
    }
    for (String x : strings)
    {
         System.out.println(x);
    }
}

这应该将集合打印两次-但是根据您的方案,第二个循环将始终立即终止。

2020-03-19