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