Skip to main content

"switch" Statements Should Have "Default" Clauses

High
reliabilitydefensive programming

What is it?

This practice is triggered by the absence of a default clause in a switch statement, which can lead to missed cases and unexpected behavior.

Why apply it?

Having a default clause ensures that even when cases do not match any specified criteria, the program takes a controlled, defined action. This prevents potential logical errors and ensures code robustness.

How to fix it?

Add a default clause at the end of your switch statements to define a clear action or to document why no action is needed when no other case is matched.

Examples

Example 1:

Negative

This negative example lacks a default case, leaving some actions unhandled.

public class ActionHandler {
public void handleAction(String action) {
switch (action) {
case "START":
System.out.println("Starting");
break;
case "STOP":
System.out.println("Stopping");
break;
// No default case to handle other actions
}
}
}

Example 2:

Negative

This negative example misses a default clause, which can lead to ignored values if they don't match any case.

switch (param) {
case 0:
System.out.println("Zero");
break;
case 1:
System.out.println("One");
break;
// Missing default clause
}

Example 3:

Positive

This positive example shows a switch statement with a proper default clause handling unexpected values.

switch (param) {
case 0:
System.out.println("Zero");
break;
case 1:
System.out.println("One");
break;
default:
System.out.println("Unexpected value");
break;
}

Negative

This negative example ignores the need for a default case, missing error handling for invalid operations.

public int calculate(int a, int b, String operation) {
switch (operation) {
case "ADD":
return a + b;
case "SUBTRACT":
return a - b;
// Missing default causes lack of handling for unsupported operations
}
}

Example 4:

Positive

This positive example demonstrates a switch statement with a default clause to handle unrecognized actions.

public class ActionHandler {
public void handleAction(String action) {
switch (action) {
case "START":
System.out.println("Starting");
break;
case "STOP":
System.out.println("Stopping");
break;
default:
System.out.println("Unknown action");
break;
}
}
}

Example 5:

Positive

This positive example uses a switch with a proper default clause in a calculation context.

public int calculate(int a, int b, String operation) {
switch (operation) {
case "ADD":
return a + b;
case "SUBTRACT":
return a - b;
default:
throw new IllegalArgumentException("Invalid operation");
}
}