流れるようなインターフェースで日付操作

流れるようなインターフェースはメソッドの名前が命。

そこで、最近はまっているのがラッパークラスを作る方法です。

Seasar2 付属の S2JDBC や、JavaScript ライブラリの jQuery でも採用されている方法です。

更新系のメソッドで this を戻り値で返しているのがミソです。

流れるインターフェースで日付操作するクラスは自分も作って使っています。おすすめです。

String dayOfWeek = new ISOCalendar()
    .addYears(1)
    .setMonth(2)
    .setDay(15)
    .getDayOfWeekText();

ただ、自分ならこういうメソッドにします。

ISOCalendar.now()
    .nextYear()
    .february()
    .day(15)
    ...

こうするとメソッドの数はめっさ増えますが、「現在の次の年の2月15日」と流れるように記述することができて、コードを読む場合もこのコードの意図するところが読み取りやすくなります。流れるようなインターフェースはメソッドの命名が超重要。偉い人いわく「単なるメソッドチェーンとは違うのだよ!メソッドチェーンとは!」

とは言うものの、どっちがいいかは好みによると思う。Calendar 操作を拡張するラッパーだと意識するならば Calendar に近い思考で使える addYears といったメソッド名の方が使いやすいでしょう。