匿名クラスでカッコよく初期化

Javaの匿名クラスを使ってかっこよくオブジェクトを初期化するテクニック - 矢野勉のはてな日記

なるほど、通常の初期化なら大抵コンストラクタに書けば十分なので、インスタンス初期化ブロックはどういうケースで使われるのか分からなかったのだが、匿名クラスと組み合わせると良い感じっぽい。

たとえばEasyMock(最近使ってない…)のモック設定が

HogeDao mockHogeDao;
MocksControl control;    

mockHogeDao.findById(1);
control.andReturn(new Hoge() {{
        id = 1;
        userName = "hogehoge";
    }}).times(2);

とかカッコよく書ける。ArrayListのaddの例のようにメソッドも呼べるので、フィールドがprivateならばsetterを呼び出して値をセットできる。

control.andReturn(new Hoge() {{
        setId(1);
        setUserName("hogehoge");
    }}).times(2);