Even if it is legal, mixing case and non-case labels in the body of a switch
statement is very confusing, and can even be the result of a typing error.
Case 1, the code is syntactically correct but the behaviour is not the expected one
switch (day) { case MONDAY: case TUESDAY: WEDNESDAY: //instead of "case WEDNESDAY" doSomething(); break; ... }
Case 2, the code is correct and behaves as expected but is hardly readable
switch (day) { case MONDAY: break; case TUESDAY: foo:for(int i = 0 ; i < X ; i++) { /* ... */ break foo; //This break statement doesn't relate to the nesting case TUESDAY /* ... */ } break; /* ... */ }
Case 1
switch (day) { case MONDAY: case TUESDAY: case WEDNESDAY: doSomething(); break; ... }
Case 2
switch (day) { case MONDAY: break; case TUESDAY: compute(args); //Put the content of the labelled "for" statement in a dedicated method break; /* ... */ }