Class DefaultComesLastCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public class DefaultComesLastCheck
    extends AbstractCheck

    Check that the default is after all the cases in a switch statement.

    Rationale: Java allows default anywhere within the switch statement. But it is more readable if it comes after the last case.

    • Property skipIfLastAndSharedWithCase - Control whether to allow default along with case if they are not last. Type is boolean. Default value is false.

    To configure the check:

     <module name="DefaultComesLast"/>
     

    Example:

     switch (i) {
       case 1:
         break;
       case 2:
         break;
       default: // OK
         break;
     }
    
     switch (i) {
       case 1:
         break;
       case 2:
         break; // OK, no default
     }
    
     switch (i) {
       case 1:
         break;
       default: // violation, 'default' before 'case'
         break;
       case 2:
         break;
     }
    
     switch (i) {
       case 1:
       default: // violation, 'default' before 'case'
         break;
       case 2:
         break;
     }
     

    To configure the check to allow default label to be not last if it is shared with case:

     <module name="DefaultComesLast">
       <property name="skipIfLastAndSharedWithCase" value="true"/>
     </module>
     

    Example:

     switch (i) {
       case 1:
         break;
       case 2:
       default: // OK
         break;
       case 3:
         break;
     }
    
     switch (i) {
       case 1:
         break;
       default: // violation
       case 2:
         break;
     }
    
     // Switch rules are not subject to fall through, so this is still a violation:
     switch (i) {
       case 1 -> x = 9;
       default -> x = 10; // violation
       case 2 -> x = 32;
     }
     

    Parent is com.puppycrawl.tools.checkstyle.TreeWalker

    Violation Message Keys:

    • default.comes.last
    • default.comes.last.in.casegroup
    Since:
    3.4