Consider a switch statement that doesn’t handle all possible values and doesn’t have a default:
enum Colors { RED, GREEN, BLUE }
switch (color) {
case RED:
case GREEN:
paint(color);
break;
}
The author’s intent isn’t clear. There are three possibilities:
The default case is known to be impossible. This could be made clear by
adding:
default: throw new AssertionError(color);
The code intentionally ‘falls out’ of the switch on the default case, and
execution continues below. This could be made clear by adding:
default: // fall out
The code has a bug, and the missing cases should have been handled.
To avoid this ambiguity, the Google Java Style Guide requires each switch statement on an enum type to either handle all values of the enum, or have a default statement group.
Suppress false positives by adding the suppression annotation @SuppressWarnings("MissingCasesInEnumSwitch")
to the enclosing element.