8

私は多くの場所で、iterableを返すのを避け、代わりに a を返す必要があることをよく読みましcollectionた。例えば ​​-

public Iterable<Maze> Portals() {     
    // a list of some maze configurations
    List<Maze> mazes = createMazes();
    ...
    return Collections.unmodifiableList(mazes);
}

を返すことはループ内iterableで使用する場合にのみ有用であるため、 whileはすでに を提供しており、より多くの制御を提供します。メソッドで具体的に an を返すことが有益な場合を教えてください。それとも、代わりに常に a を返す必要がありますか?foreachcollectioniteratoriterablecollection

注:この質問はGuavaライブラリに関するものではありません

4

4 に答える 4

2

私は長所と短所を見ることができます:

  • 利点の 1 つIterableは、 より単純なインターフェイスであることCollectionです。非標準のコレクション型がある場合は、より簡単に作成できる場合がありIterableますCollectionCollection実際、一部のメソッドの実装に問題がある種類のコレクションがあります。equals(Object)たとえば、メンバーシップを決定するために標準的な方法に依存したくない、怠惰なコレクション型とコレクション。

  • 1つの欠点は、Iterable機能が貧弱であることです。を実装する具象型がありCollection、それを として返す場合Iterable、コードがさまざまな便利なコレクション メソッドを (直接) 呼び出すことができる可能性を排除しています。

  • Iterable も Collection も適していない場合があります。たとえば、プリミティブ型の専門的なコレクション...プリミティブ ラッパー型を使用するオーバーヘッドを回避する必要がある場合。

を返すことが良い習慣なのか悪い習慣なのか、実際には言えませんIterable。状況によります。たとえば、設計している API の目的、および API に配置する必要がある要件または制約などです。

于 2013-10-20T08:34:27.287 に答える
1

問題は、基になるコレクションが変更されると、問題が発生することです。例外をスローするコレクションを使用している場合はconcurrentmodification、それにも注意する必要がありますが、コレクションではそのような問題はありません。

于 2013-10-20T07:18:30.317 に答える