为什么Java的迭代器不是可迭代的?

2022-08-31 06:33:44

为什么接口不扩展?IteratorIterable

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

这是故意的还是只是对Java设计师的疏忽?

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

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

其中返回迭代器。listSomeObjects()


答案 1

迭代器是有状态的。这个想法是,如果你调用两次,你会得到独立的迭代器 - 无论如何,对于大多数可迭代对象。在您的场景中,情况显然并非如此。Iterable.iterator()

例如,我通常可以写:

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

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


答案 2

因为迭代器通常指向集合中的单个实例。可迭代意味着可以从对象中获取迭代器以遍历其元素 - 并且不需要迭代单个实例,这就是迭代器所表示的。