事前条件、事後条件、不変条件をJavaのassertで代用することは可能か?

基本的にはこれら3点セットはDesign by Contractのもので、仕様を明確に記述するための方法です。
で、その副産物として、実行時にその式を評価することにより動的に検証することができます。これはassertの効果と似ています。


では、assertで代用できるでしょうか?


事前条件はメソッドの入り口で書けばよいので可能。
事後条件はreturnの前に書けばよいのですが、returnが複数あると困ります。try-finallyブロックをわざわざ作ってfinally内に書けばできます。でも、事後条件にはメソッド実行前の値や戻り値も式の中に埋め込めます。assertではさすがにムリ。
不変条件は、そのフィールドを変更する箇所に書くことになりますが、たくさんあると困ります。setterにassertを書き、クラス内からでもsetter経由で変更するようにすれば可能です。
ただ、これらすべてに言えることですが、記述能力がJavaの式に比べかなり強力です。Javaだとチョットした関数になるようなものも、1行で記述することができます。この記述能力の高さは魅力的。