Effective Javaを読むチャレンジ-項目2-

項目2 数多くのコンストラクタパラメータにはビルダーを検討する

ここではstaticファクトリメソッドやコンストラクタの問題点を指摘しています。それはパラメータが数多くあるとき、特にオプションがある場合です。

そういったオブジェクトの生成にはテレスコーピングコンストラクタ、またはJavaBeansという選択肢があったが、それならビルダーパターンを選択した方がよいのでは?という提起をしています。

テレスコーピングコンストラクタの場合、パラメータの並びを常に慎重に考えなければならず、パラメータに渡すデータを入れ替えてもコンパイルは通り、実行時に想定外の振る舞いをするので危険ということですね。

JavaBeansには確かにテレスコーピングコンストラクタの欠点はありません。しかしsetterの呼び出しが分割されるため、オブジェクト生成が途中で整合性がない状態かもしれないと本書には書かれています。長い処理~setter1~長い処理~setter2とコードを書くとsetterの呼び忘れや想定外の上書き処理があった場合、デバッグがキツくなりますね。

あるあるというか、どっちもあったあったって感じです・・・この話に限った話でもないですが。

そこでビルダーパターンの登場です。

というオブジェクト生成の仕方も素晴らしい、ですが・・・こっから先の説明が難しい。

パラメータに対する不変式を強制できる

ビルダーパターンは不変クラスなので、きっとその通りなのでしょう。。。

複数のパラメータが関係する不変式を強制する~の部分

相関的なパラメータも関係するパラメータを受けた時点でチェック可能、ということですね。

ビルダーは複数の可変長パラメータを受け取ることができる

メソッドごとに可変長パラメータを定義できますから、これは目から鱗。この後の説明もビルダーパターン便利だな~と思わせるものばかり。

項目1よりはだいぶ易しい説明でした。

広告
  • LINEで送る