为什么Java的迭代器不是可迭代的?
为什么接口不扩展?Iterator
Iterable
该方法可以简单地返回 。iterator()
this
这是故意的还是只是对Java设计师的疏忽?
能够像这样将 for-each 循环与迭代器一起使用会很方便:
for(Object o : someContainer.listSomeObjects()) {
....
}
其中返回迭代器。listSomeObjects()
为什么接口不扩展?Iterator
Iterable
该方法可以简单地返回 。iterator()
this
这是故意的还是只是对Java设计师的疏忽?
能够像这样将 for-each 循环与迭代器一起使用会很方便:
for(Object o : someContainer.listSomeObjects()) {
....
}
其中返回迭代器。listSomeObjects()
迭代器是有状态的。这个想法是,如果你调用两次,你会得到独立的迭代器 - 无论如何,对于大多数可迭代对象。在您的场景中,情况显然并非如此。Iterable.iterator()
例如,我通常可以写:
public void iterateOver(Iterable<String> strings)
{
for (String x : strings)
{
System.out.println(x);
}
for (String x : strings)
{
System.out.println(x);
}
}
这应该打印集合两次 - 但是对于您的方案,第二个循环将始终立即终止。
因为迭代器通常指向集合中的单个实例。可迭代意味着可以从对象中获取迭代器以遍历其元素 - 并且不需要迭代单个实例,这就是迭代器所表示的。