是否有任何特殊原因基本的Java迭代器被编程为没有像peek()这样的函数,它会返回下一个元素而不推进迭代器?
Ste*_*n C 15
为什么标准的Java迭代器没有peek()?
因为peek()它不是Iterator设计模式的核心功能.
因为绝大多数迭代器用例都不需要它.强制所有实现(包括无数的自定义/第三方类)实现不必要的方法将是一个坏主意.
因为该peek()方法对惰性源的迭代器的语义有潜在的影响.
因为peek()在某些情况下,实现会影响迭代器的效率(内存,CPU).是否实际使用它.
因为peek()在某些不明显的情况下会导致内存泄漏.
因为... KISS.
但最终,真正的原因是......因为他们在2000年左右设计了它.当设计辩论发生时我们不在房间里1.
1 -对于什么是值得的,似乎大多数2种其他语言已经为他们的标准迭代器API同样的决定.Rust似乎是个例外; 请参阅https://doc.rust-lang.org/std/iter/struct.Peekable.html.
2 - ...基于使用谷歌搜索的高度非科学的"调查".
如果你想要一个提供的迭代器抽象peek(),你可以扩展Iterator接口并为自己实现迭代器.实际上,通用的迭代器迭代器可以很容易地实现为常规的包装器Iterator.
或者寻找第三方API /实现; 例如番石榴,Apache Commons等
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |