イテレータを進めることなく、次の要素を返す基本的なJavaのイテレータは、PEEK()のような機能を持ってしないようにプログラムされた特定の理由が、ありますか?
標準のJavaイテレータは)(PEEKを持っていないのはなぜ?
のでは
peek()
イテレータのデザインパターンのコア機能ではありません。イテレータのユースケースの大半は、それを必要としないので。不必要なメソッドを実装する(無数のカスタム/サードパーティのクラスを含む)すべての実装を強制することは悪い考えです。
そのため
peek()
の方法は、怠惰な...元のイテレータのための意味論上の潜在的な影響を持っています。実装があるため
peek()
、いくつかの状況では、反復子の効率(メモリ、CPU)に影響を与えます。あなたが実際にそれを使用するかどうか。そのため
peek()
、いくつかのあいまいな状況でしまうが、メモリリークにつながります。ので... KISS。
しかし、最終的には、本当の理由は...、彼らはそれを年〜2000年にはそのようにバックを設計しているため。設計の議論が行われましたときに、私たちは部屋にはありませんでした1。
1 -それは価値がある何のために、それはほとんどのようです2つの他の言語は、その標準のイテレータAPIの同じ決定をしました。錆は、この例外のようです。参照https://doc.rust-lang.org/std/iter/struct.Peekable.htmlを。
2 - ... Google検索を使用して非常に非科学的な「調査」に基づきます。
あなたが提供する反復子抽象化したい場合はpeek()
、同様に、あなたが拡張できるIterator
インターフェースを、自分のためのイテレータを実装します。実際、汎用のイテレータと-PEEKは、簡単に、通常のためのラッパーとして実装することができますIterator
。
またはサードパーティのAPI /実装(S)のための表情。例えばグアバ、Apacheのコモンズなど、