コンストラクタとstaticメソッド

まずはEffective Javaでおなじみ、「http://d.hatena.ne.jp/makiyamakoji/20090326/p1」で紹介されているstaticファクトリメソッドという方法。

public class Hoge {
	private Hoge() {
		...
	}
	// static ファクトリーメソッド
	public static Hoge newInstance() {
		return new Hoge();
	}
}

つぎに、「コンストラクタで final なフィールドをあきらめない方法 - ぐるぐる~」で紹介されているコンストラクタからstaticメソッドを呼ぶ方法

public final class Hoge {
    final int hoge;
    public Hoge(int piyo) {
        hoge = prepareHoge(piyo);
    }
    private static int prepareHoge(int piyo) {
        // 何かとても複雑な処理
        // ...
        return result;
    }
}

publicなstaticメソッドからprivateなコンストラクタを呼ぶというのと、
publicなコンストラクタからprivateなstaticメソッドを呼ぶというのが
対になっていておもしろいと思った。