8

IEnumerable<T>C#を使用することで、インターフェイスが大好きになりました。それだけを配り、取り入れたい場合がたくさんあります。さらに、.Netライブラリで役立ちます。たとえば、List<T>をとるクラスのコンストラクタがありIEnumerable<T>ます。

現時点ではJavaを使用する必要があり、当然、同等のIterable<T>インターフェースを使用したいと思いました。ただ、どこでも使えるとは思えません。代わりに、すべてが拡張Collection<T>インターフェースを使用しているようです。どうしてこれなの?

例として、:ArrayList<T>を取るコンストラクターがあります。Collection<T>

指定されたコレクションの要素を含むリストを、コレクションのイテレーターによって返される順序で作成します。

Iterable<T>代わりに取ってみませんか?

4

3 に答える 3

5

IterableはJava5でのみ追加されました。これは、古いメソッド(ほとんどのメソッド)がコレクションを使用することを意味します。Iterableを使用する可能性のある新しいメソッドでさえ、それを使用していません。:(

問題は、最も反復可能なのがコレクションであるということだと思います。

于 2011-05-11T11:28:40.897 に答える
2

例として、コレクションを受け取るArrayListコンストラクターがあります

予測可能なサイズを持つことは、特に良いことです。ArrayListの場合(toArray()を使用して基になるObject []を構築します)

指定されたコレクションの要素を含むリストを、コレクションのイテレーターによって返される順序で作成します。

素敵な太陽はドキュメントを再度更新するのに怠惰でした。イテレータをまったく使用していません。実際、私自身、ドキュメントを読むことはほとんどありません。なぜなら、ドキュメントは誤解を招くか、単に間違っている傾向があるからです。

また、AbstractCollectionをサブクラス化することでIterableをコレクションに簡単に適合させることができます(size()とiterator()のみが簡単に実装されます)

Iterableは、主にforeachコンストラクトに準拠するために導入されました。

于 2011-05-11T11:34:11.467 に答える
0

コレクションを反復処理するだけでなく、コレクションでより多くのことを実行できるようにしたいのでしょうか。

于 2011-05-12T00:17:11.903 に答える