標準のJavaイテレータは)(PEEKを持っていないのはなぜ?

イタチ:

イテレータを進めることなく、次の要素を返す基本的なJavaのイテレータは、PEEK()のような機能を持ってしないようにプログラムされた特定の理由が、ありますか?

スティーブンC:

標準のJavaイテレータは)(PEEKを持っていないのはなぜ?

  1. のではpeek()イテレータのデザインパターンのコア機能ではありません。

  2. イテレータのユースケースの大半は、それを必要としないので。不必要なメソッドを実装する(無数のカスタム/サードパーティのクラスを含む)すべての実装を強制することは悪い考えです。

  3. そのためpeek()の方法は、怠惰な...元のイテレータのための意味論上の潜在的な影響を持っています。

  4. 実装があるためpeek()、いくつかの状況では、反復子の効率(メモリ、CPU)に影響を与えます。あなたが実際にそれを使用するかどうか。

  5. そのためpeek()、いくつかのあいまいな状況でしまうが、メモリリークにつながります。

  6. ので... 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のコモンズなど、

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=172241&siteId=1