Design by Contract(4)

ほぼ完成しました。

前回紹介したのとほぼ変わってませんが・・・

こんな感じで書けます。
@Invariant(enableds={true, true})
@PreCondition(exps={"$1.doubleValue() == 10", "$2.intValue() > 0"})
@PostCondition(exps={"$1.doubleValue() == 10", "$2.intValue() > 0"})

継承クラスにも同じルールを適用させたいので、
そのあたりをうまいことやれれば完璧かな。

あと、文字列を解析して実行するってのはちょっとだけ自前で作ったけど、よくよく探してみたらCommonsにありました。
Commons Jexlってやつ。

これがスゴイ。

Expression e = ExpressionFactory.createExpression("foo.innerFoo.bar()");
JexlContext jc = JexlHelper.createContext();
jc.getVars().put("foo", new Foo() );
Object o = e.evaluate(jc);

とこれだけ。 簡単、ラクチン。超便利。

そういえば、
ライブラリ依存リファクタリング
なるものを最近見つけた。
要はライブラリでできることはお任せしちゃおうって考え方。
ちょっと見てみると面白い。
常識的にやっていたけど、これある程度体系化したら本になるかもね。

ちょっと連載してみようかしらん