項目1.コンストラクタの代わりにstaticファクトリメソッドを検討する
例
public class EffectiveJava1 {
// コンストラクタ
public EffectiveJava1() {
}
// staticファクトリメソッド
public static EffectiveJava1 newInstance() {
return new EffectiveJava1();
}
}
長所
- 名前を持つこと
- その呼び出しごとに新たなオブジェクトを生成する必要がないこと
- メソッドの戻り値型の任意のサブタイプのオブジェクトを返せる
- 返されるオブジェクトのクラスは、入力パラメータの値に応じて呼び出しごとに変えられる
- 返されるオブジェクトのクラスは、そのstaticファクトリメソッドを含むクラスが書かれた時点で存在する必要さえない
短所
- publicあるいはprotectedのコンストラクタを持たないクラスのサブクラスは作れない
- staticファクトリメソッドを見つけるのが難しい
staticファクトリメソッドに共通する命名規約
- from
- of
- valueOf
- instanceあるいはgetInstance
- createあるいはnewInstance
- getType
- newType
- type