タイトル通り、読ん<Effective Java>
でいますが、chapter2を読むと、
2 に答える
オブジェクトがimmutableである場合、オブジェクト (JavaBeans など) がmutableである場合よりも心配する必要はありません。不変オブジェクトを取得すると、基本的にスレッド同期の問題の影響を受けず、防御的なコピーを作成せずに自由に渡すことができます (ユーザーまたは善意のライブラリ メソッドがデータを変更するのを防ぐため)。
当然のことながら、変更可能なオブジェクトを作成するのは難しい場合があり、コンストラクターが長すぎて管理できない場合があります。ここで Builder パターンが役立ちます。変更可能な Builder を使用して初期状態を作成し、それをそのオブジェクトのコンストラクター内の不変オブジェクトにコピーします。
不変オブジェクトに可変オブジェクトへの参照が含まれている場合、外部オブジェクトは実際には不変ではないことに注意してください。GuavaImmutableList
には、ImmutableMap
、およびImmutableSet
便利なものが見つかるかもしれません。
Builder はすべてのBuilder
パラメーターをコンストラクターに渡す前に検証できるため、パターンはより安全です。
これには GoogleがPreconditions
便利です。
言うまでもなく、ビルダーを使用すると、複雑なオブジェクトの構築が非常に簡潔になります。
ビルダーパターンに従うオブジェクトは、多かれ少なかれ変更可能であるとは言いませimmutable
んJavaBean
。フィールドの宣言方法と公開するメソッドによって異なります。