In Java 12, the switch
statement has been enhanced so that it can be used as an expression. It is now also possible to switch on multiple constants in a single case, resulting in code that is more concise and readable. These enhancements are a preview language feature, which means that they must be explicitly enabled in the Java compiler and runtime using the --enable-preview
flag.
Consider the following switch
statement:
int result = -1; switch (input) { case 0: case 1: result = 1; break; case 2: result = 4; break; case 3: System.out.println("Calculating: " + input); result = compute(input); System.out.println("Result: " + result); break; default: throw new IllegalArgumentException("Invalid input " + input); }
In Java 12, this can be rewritten using a switch
expression as follows:
final int result = switch (input) { case 0, 1 -> 1; case 2 -> 4; case 3 -> { System.out.println("Calculating: " + input); final int output = compute(input); System.out.println("Result: " + output); break output; } default -> throw new IllegalArgumentException("Invalid input " + input); };
As illustrated above:
- The
switch
is being used in an expression to assign a value to theresult
integer - There are multiple labels separated with a comma in a single
case
- There is no fall-through with the new
case X ->
syntax. Only the expression or statement to the right of the arrow is executed - The
break
statement takes an argument which becomes the value returned by theswitch
expression (similar to areturn
)