A switch statement allows the application to have multiple possible execution paths based on the value of a given expression in runtime.
The evaluated expression is called the selector expression which must be of type char, byte, short, int, Character, Byte, Short, Integer, String, or an enum
.
In Java 14, with switch expression, the entire
switch
block “gets a value” that can then be assigned to a variable in same statement.
1. switch expression example
- In Java 14, it is a standard feature. In Java 13 and Java 12, it was added as an preview feature.
- It has the support of multiple case labels and using yield to return value in place of old
return
keyword. - It also support returning value via label rules (arrow operator similar to lambda).
- If we use arraw
(->)
operator, we can skipyield
keyword as shown in isWeekDayV1_1(). - If we use colon
(:)
operator, we need to useyield
keyword as shown in isWeekDayV1_2(). - In case of multiple statements, use curly braces along with
yield
keyword as shown in isWeekDayV2(). - In case of
enum
, we can skip the default case. If there is any missing value not handled in cases, compiler will complain. In all other expression types (int, strings etc), we must providedefault
case as well.
public class SwitchExpressions { public static void main(String[] argv) { System.out.println(isWeekDayV1_1(Day.MON)); //true System.out.println(isWeekDayV1_2(Day.MON)); //true System.out.println(isWeekDayV2(Day.MON)); //true } //1 - Return value directly enum Day { MON, TUE, WED, THUR, FRI, SAT, SUN }; public static Boolean isWeekDayV1_1 (Day day) { Boolean result = switch(day) { case MON, TUE, WED, THUR, FRI -> true; case SAT, SUN -> false; }; return result; } public static Boolean isWeekDayV1_2 (Day day) { Boolean result = switch(day) { case MON, TUE, WED, THUR, FRI : yield true; case SAT, SUN : yield false; }; return result; } //2 - Multiple statements public static Boolean isWeekDayV2 (Day day) { Boolean result = switch(day) { case MON, TUE, WED, THUR, FRI -> { System.out.println("It is WeekDay"); yield true; } case SAT, SUN -> { System.out.println("It is Weekend"); yield false; } }; return result; } }
2. yield vs return
A return statement returns control to the invoker of a method or constructor. A yield statement transfers control by causing an enclosing switch
expression to produce a specified value.
SwitchExpression: YieldStatement: yield Expression;
SwitchExpression
tries to find a correctYieldStatement
to transfer control to innermost enclosingyield
target.SwitchExpression
terminates normally and the value of theExpression
becomes the value of theSwitchExpression
.- If the evaluation of the
Expression
completes abruptly for some reason, then theyield
statement completes abruptly for same reason.
Drop me your questions in comments related to enhanced switch statement in Java 14.
Happy Learning !!