assertionについて

めも。Sunの文章から



同様に、public メソッドの引数チェックに assertion を使うべきではありません。引数チェックは一般にはメソッドの責任であり、この責任は assertion の有効無効に関わらず遂行されなければなりません。引数チェックに assertion を使うことにはさらに別の問題もあります。誤った引数は IllegalArgumentException、IndexOutOfBoundsException、 NullPointerException といった実行時例外を引き起こすべきです。しかし、assertion の失敗は例外を throw しません。




しかしもし、public ではないメソッドに事前条件があり、クラスの使用者がそのクラスを用いて行うことに対して事前条件は何も影響しないとクラスの作者が信じるなら、assertion は適当です。
・・・
単純な assertion 機能は契約による設計スタイルのプログラミングを、限定された形で可能にします。assert 文は事後条件とクラス不変条件のチェックに適します。事前条件チェックは相変わらずメソッド内で行うべきです。事前条件チェックは、API 仕様書に書かれた特定の例外を throw します。 IllegalArgumentException や IllegalStateException といった例外です。