アサーションを効果的に使用できるもう一つの例は、デフォルトの case を持たない switch 文です。
たとえば :
switch(suit) { case Suit.CLUBS: ... break; case Suit.DIAMONDS: ... break; case Suit.HEARTS: ... break; case Suit.SPADES: ... } |
プログラマはおそらく、「上記 switch 文の 4 つの case のうちの 1 つが常に実行される」と仮定しています。この仮定をテストするには、次のようなデフォルトの case を追加します。
default: assert false; |
通常は、プログラマが「本来到達すべき場所ではない」と仮定している場所ならば、次の文はどこにでも置けるはずです。
assert false; |
たとえば、次のようなメソッドがあると仮定します。
void foo() { for (...) { if (...) return; } // Execution should never reach this point!!! } |
最後のコメントを次のように変更します。
assert false; |
この技法を使用するときには十分に注意してください。ある文が到達不能である場合 (JLS 14.19 を参照)、その文が到達不能であることを表明しようとすると、コンパイル時にエラーが発生します。