0
0

More than 3 years have passed since last update.

Effective Java(第3版)の個人的なまとめ【項目1】 コンストラクタの代わりにstaticメソッドを検討する

Posted at

Effective Javaを学んだ個人的なまとめです。

結論

インスタンスの生成や利用を考えるときに、コンストラクタの利用を無意識に考えるのではなく、staticファクトリメソッドも検討に入れよう。

コンストラクタを利用する場合と比較してどのようなメリットとデメリットがあるのか。

👍 メリット

1.名前を持つことができる

コンストラクタはクラス名と同じであるため、任意の名前を持つことができない。staticメソッドの場合は、メソッドなのでその動作にあった名前をつけることができるためわかりやすい

2. インスタンスを生成する必要がない

キャッシュしているインスタンスの再利用をすることで不用意なインスタンスの生成を防ぎ、計算量、処理量を減らすことができる。(GoFデザインパターンのシングルトン)

3.任意のサブタイプのオブジェクトを返すことができる
4.返却するオブジェクトを入力によって変えることができる

コンストラクタと異なり、戻り値を任意に定められるため、型にあった任意のオブジェクトを返却することができる。

5.クラス作成時に返却されるオブジェクトのクラスがなくてもよい

ある種当たり前の話ですが、コンストラクタの存在のためにはクラスの定義が必要である。一方staticファクトリメソッドの場合はクラスが存在しなくてもよいため、柔軟な対応が可能となる。

👎 デメリット

1. publicあるいはprotectedのコンストラクタを持たないサブクラスを作れない

ただ逆に、継承ではなく、コンポジションを使うことをプログラマに促すことができるメリットもある。

2. staticファクトリメソッドを見つけるのが難しい

JavaDocが目立たせてくれない。ただ、IDEや命名規則によって解決することが可能ではある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0