为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Java的Iterator不可迭代?

为什么Java的Iterator不可迭代?

MMMHUHU 2019-10-16 14:00:29
为什么Iterator接口不扩展Iterable?该iterator()方法可以简单地返回this。是故意的还是对Java设计人员的监督?能够将for-each循环与迭代器一起使用会很方便:for(Object o : someContainer.listSomeObjects()) {    ....}其中listSomeObjects()返回迭代器。
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

对于我的$ 0.02,我完全同意Iterator不应该实现Iterable,但是我认为Enhanced for循环应该接受其中任何一个。我认为整个“使迭代器可迭代”的论点是作为一种解决语言缺陷的方法而提出的。


引入增强的for循环的全部原因是,它“消除了对集合和数组进行迭代时迭代器和索引变量的繁琐和易错性” [ 1 ]。


Collection<Item> items...


for (Iterator<Item> iter = items.iterator(); iter.hasNext(); ) {

    Item item = iter.next();

    ...

}


for (Item item : items) {

    ...

}

那么为什么同一个参数对迭代器不成立?


Iterator<Iter> iter...

..

while (iter.hasNext()) {

    Item item = iter.next();

    ...

}


for (Item item : iter) {

    ...

}

在这两种情况下,都已删除了对hasNext()和next()的调用,并且在内部循环中没有对迭代器的引用。是的,我知道可以重复使用Iterables来创建多个迭代器,但是所有这些事情都发生在for循环之外:在循环内,每次迭代器返回的项都只能向前推进一个。


同样,允许这样做也将使for循环易于用于枚举,正如其他地方所指出的,它类似于Iterators not Iterables。


因此,不要使Iterator实现Iterable,而是更新for循环以接受其中任何一个。


干杯,


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 452 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信