Java 2 SDK for Solaris Developer's Guide

Control-Flow Invariants

Another good candidate for an assertion is a switch statement with no default case.

For example:


 switch(suit) {
      case Suit.CLUBS:
        ...
        break;

      case Suit.DIAMONDS:
        ...
        break;

      case Suit.HEARTS:
        ...
        break;

      case Suit.SPADES:
        ...
    }

The programmer probably assumes that one of the four cases in the above switch statement will always be executed. To test this assumption, add the following default case:


default:
        assert false;

More generally, the following statement should be placed at any location the programmer assumes will not be reached.


 assert false;

For example, suppose you have a method that looks like this:


 void foo() {
        for (...) {
            if (...)
                return;
         }
         // Execution should never reach this point!!!
    }

Replace the final comment with:


assert false;

Note, use this technique with discretion. If a statement is unreachable as defined in (JLS 14.19), you will see a compile time error if you try to assert that it is unreached.