为什么Java的Iterator不可迭代?

为什么Iterator接口不扩展Iterable?


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


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


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


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

    ....

}

其中listSomeObjects()返回迭代器。


MMMHUHU
浏览 447回答 3
3回答

largeQ

对于我的$ 0.02,我完全同意Iterator不应该实现Iterable,但是我认为Enhanced for循环应该接受其中任何一个。我认为整个“使迭代器可迭代”的论点是作为一种解决语言缺陷的方法而提出的。引入增强的for循环的全部原因是,它“消除了对集合和数组进行迭代时迭代器和索引变量的繁琐和易错性” [ 1 ]。Collection<Item> items...for (Iterator<Item> iter = items.iterator(); iter.hasNext(); ) {&nbsp; &nbsp; Item item = iter.next();&nbsp; &nbsp; ...}for (Item item : items) {&nbsp; &nbsp; ...}那么为什么同一个参数对迭代器不成立?Iterator<Iter> iter.....while (iter.hasNext()) {&nbsp; &nbsp; Item item = iter.next();&nbsp; &nbsp; ...}for (Item item : iter) {&nbsp; &nbsp; ...}在这两种情况下,都已删除了对hasNext()和next()的调用,并且在内部循环中没有对迭代器的引用。是的,我知道可以重复使用Iterables来创建多个迭代器,但是所有这些事情都发生在for循环之外:在循环内,每次迭代器返回的项都只能向前推进一个。同样,允许这样做也将使for循环易于用于枚举,正如其他地方所指出的,它类似于Iterators not Iterables。因此,不要使Iterator实现Iterable,而是更新for循环以接受其中任何一个。干杯,
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java