Java の String クラスのように、不変クラスを効率的に構築する方法を探しています。
1322 次
3 に答える
8
- すべてのフィールドは
private
、できればfinal
- クラスをオーバーライドできないようにする - クラスを final にするか、静的ファクトリを使用してコンストラクタを非公開にする
- フィールドはコンストラクター/ファクトリーから入力する必要があります
- フィールドにセッターを提供しないでください
- コレクションに注意してください。を使用し
Collections.unmodifiable*
ます。また、コレクションには不変のオブジェクトのみを含める必要があります - すべてのゲッターは不変オブジェクトを提供するか、防御コピーを使用する必要があります
- オブジェクトの内部状態を変更するメソッドを提供しないでください。
Tom Hawtin さんfinal
は、それは任意であると指摘しました。ハッシュ関数が呼び出されたときにのみ割り当てられるString
class
キャッシュ変数があります。hash
于 2009-06-19T09:52:46.410 に答える
1
どのフィールドも変更できない場合、オブジェクトは不変であるため、それらのフィールドは である必要がありますfinal
。オブジェクトをサブクラス化したくない場合は、final
String と同じように、クラス自体を作成することもできます。多くの情報を持つ不変オブジェクトを簡単に構築するには、ファクトリ パターンを確認する必要があります。
詳細については、ウィキペディアを参照してください
于 2009-06-19T09:43:07.753 に答える