ArrayList属性を持つドメインクラスがあるとします。このタイプのインスタンスのgetterとsetterを記述するとき(変更を避けるため)、ベストプラクティスは何ですか?ゲッターとセッターとコンテナオブジェクト(ArrayList、HashMapなど)
答えて
public List getList() {
return Collections.unmodifiableList(list);
}
戻りCollection.unmodifiableList()
方法で使用して変更不可能であるリスト:
あなたはCollections.unmodifiableList()を使用することができます。他のメジャーなコレクションタイプには同等のものがあります。
私はほとんどの場合、私がやることですが、対処したくないかもしれないUnsupportOperationException
を投げます。この場合、のような複合クラスを宣言することをお勧めします。これにはList
が含まれています。リストを変更するメソッドを除外したい場合は、サポートするすべてのメソッドを公開します。このことは、Collection
インターフェイスとの互換性がなくなりました。
おそらく、リスト上で動作するコードをドメインクラスに移動することをお勧めします。おそらく、ドメインに適した方法でシーケンスを表すドメインクラスを追加します。リストの要素が可変であれば、あなたもそれらについて何かをしたい場合があります
return Collections.unmodifiableList(new ArrayList<Thing>(things));
// Bit big - shame there isn't a single method and class to do this.
return new ArrayList<Thing>(things);
// Do you really want to see client code modifying the list?
return Collections.unmodifiableList(things);
// Client may expecting a snapshot, modifications to the original will mess up.
注:あなたがリストを公開するために必死であれば
は、次の選択があります。
また、リストの不変スナップショットを作成することを検討してください。
public List getList() {
ArrayList copy = new ArrayList(this.list);
return Collections.unmodifiableList(copy);
}
我々は
listXXX();
命名規則を持っているあなたに、読み取り専用のリストを与えます。 適切なアクセス修飾子に加えて、セッター/ゲッターがあるかもしれません。
guava ImmutableListクラスを使用してください。あなたのゲッターは、フォームに従ってください:
public ImmutableList<T> getMyList() {
ImmutableList.copyOf(myList);
}
Collections.unmodifiableList以上グアバの利点は、それがあなたのcolllectionは、メソッドのシグネチャでは不変であるクライアントに明らかになったので、誤って試みる人々の非常に少ないチャンスがあるということですコレクションに何かを追加する。
- 1. インターフェイスとゲッター\セッター
- 2. セッターとゲッター/クラス
- 3. @propertyとセッターとゲッター
- 4. スーパークラスのゲッターとセッター?
- 5. ゲッターとセッターのメソッド
- 6. C#6ゲッターとセッター
- 7. Scalaのセッターとゲッター
- 8. 同期ゲッターとセッター
- 9. javascriptのゲッターとセッター
- 10. 角2セッターとゲッター
- 11. 制御ゲッターとセッター
- 12. ゲッターとセッターのプロトタイプパターン
- 13. セッターとゲッターのメッセージ
- 14. 使用ゲッターとセッター
- 15. アレイのゲッターとセッター
- 16. cakephp OOPゲッターとセッター
- 17. セッターとゲッターのエラー
- 18. セッター/ゲッターとencapusulation JavaIndexoutbounds
- 19. セッターとゲッターとサブクラスのトラブル
- 20. セッター/ゲッターとのgetName()とアプリケーションエラー
- 21. C#の - 他の言語と異なるゲッター/セッターは、Javaゲッターとセッターで
- 22. モンゴイドモデルのセッターとゲッターをオーバーライド
- 23. AngularJS、ゲッターとセッターのラジオボタン
- 24. 列挙型のセッターとゲッター
- 25. モデルオブジェクトのゲッターとセッター(角4)
- 26. AtomicIntegerと同期ゲッター/セッター
- 27. Pythonでのゲッターとセッター
- 28. ゲッターとセッターの説明は?
- 29. Doxygen除外ゲッターとセッター
- 30. ゲッターとセッターの代替品
変更不可能なリストが説明されている場所を指していても、これを展開できますか? – Pureferret