assertとIllegalArgumentException
入力値の事前条件チェックにassertとIllegalArgumentExceptionのどちらを使うか。
assertの方が記述が簡単(IllegalArgumentExceptionを投げるstaticメソッドを用意すれば、そんなに変わらないかな)。
assertは1.4以降でしか使えない。
assertは実行時に-eaオプションが必要で、慣れていないアプリケーションサーバとかは、どこで設定するのか分からなくて迷う。
assertなら不要な時はコンパイルオプションで簡単に削除できる。
assertはうっかり副作用のある式を書いてしまうバグが起こり得る。
あとassert使うとstaticイニシャライザがコンパイラで生成されて、この部分のせいで、コードカバレッジが100%にならないことがあり、気分的にすっきりしない(笑)
static {};
Code:
0: ldc_w #5; //class Foo
3: invokevirtual #6; //Method java/lang/Class.desiredAssertionStatus:()Z
6: ifne 13
9: iconst_1
10: goto 14
13: iconst_0
14: putstatic #2; //Field $assertionsDisabled:Z
17: return
他にもあるかな...








