Switch Expression Patterns
Modern Switch Expression Syntax
Java 12 introduced a more concise and powerful switch expression syntax, transforming traditional switch statements into more expressive and functional constructs.
Traditional vs. Modern Switch Syntax
Feature |
Traditional Switch |
Modern Switch Expression |
Syntax |
switch (value) { case x: ... } |
result = switch (value) { case x -> ... } |
Return Value |
No direct return |
Can return value directly |
Brevity |
More verbose |
More compact |
Basic Switch Expression Pattern
int dayType = switch (day) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> 1;
case SATURDAY, SUNDAY -> 2;
default -> 0;
};
Yield Keyword for Complex Logic
int result = switch (value) {
case 1 -> {
System.out.println("Processing first case");
yield 100;
}
case 2 -> {
System.out.println("Processing second case");
yield 200;
}
default -> {
System.out.println("Default case");
yield 0;
}
};
Pattern Matching with Switch (Java 17+)
Object obj = "Hello";
String result = switch (obj) {
case Integer i -> "Integer: " + i;
case String s -> "String: " + s.toUpperCase();
case null -> "Null value";
default -> "Unknown type";
};
Switch Expression Flow
graph TD
A[Input Value] --> B{Switch Expression}
B -->|Case 1| C[Return/Yield Value 1]
B -->|Case 2| D[Return/Yield Value 2]
B -->|Default| E[Return Default Value]
C --> F[Result]
D --> F
E --> F
Best Practices
- Use arrow (
->
) syntax for concise expressions
- Leverage
yield
for complex case logic
- Ensure all possible cases are covered
- Prefer switch expressions over traditional switches
Enum-based Switch Expressions
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Day day = Day.WEDNESDAY;
String typeOfDay = switch (day) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "Weekday";
case SATURDAY, SUNDAY -> "Weekend";
};
Switch expressions can improve code readability and potentially offer performance benefits by reducing branching complexity. LabEx recommends exploring these modern Java features to write more elegant code.