实际上,switch表达式作为一个新特性是在Java 14中作为预览功能引入的,并在Java 12中作为预览特性首次亮相,然后在Java 17中作为稳定特性正式被采用。这个特性极大地增强了switch语句的功能和灵活性,使得它不仅可以用于执行代码块,还可以直接返回值,类似于其他编程语言中的switch-case结构。
switch表达式的特点
- 返回值:Java 17中的switch表达式可以直接返回一个值,这意味着它可以用于赋值操作或作为方法的返回值。
- 简洁的语法:支持简化的case标签和“箭头”(
->
)语法,使得代码更加紧凑。 - yield关键字:用于从switch表达式中返回一个值。类似于return,但仅在switch表达式中使用。
- 默认的default分支:仍然是可选的,用于处理未匹配到的case情况。
- 模式匹配(Pattern Matching):虽然模式匹配作为完整特性尚未在Java 17中完成标准化,但switch表达式已经为未来的模式匹配做好了铺垫,允许更复杂的匹配逻辑。
使用示例
传统Java switch语句:
String day;
switch (dayOfWeek) {
case MONDAY:
day = "Start of the work week!";
break;
case FRIDAY:
day = "TGIF!";
break;
case SATURDAY:
case SUNDAY:
day = "Weekend!";
break;
default:
day = "Just another weekday.";
break;
}
使用Java 17的switch表达式:
String day = switch (dayOfWeek) {
case MONDAY -> "Start of the work week!";
case FRIDAY -> "TGIF!";
case SATURDAY, SUNDAY -> "Weekend!";
default -> "Just another weekday.";
};
注意事项
- 在使用switch表达式时,每一个case分支都必须以
->
结尾并紧接着一个表达式,用于计算该分支的返回值。 - 如果没有合适的case匹配且没有default分支,会抛出
java.lang.IllegalStateException
异常。 - yield语句可以用于更复杂的逻辑,当需要在case体内执行多条语句后再返回一个值时。
总的来说,Java 17中switch表达式的正式引入,使得Java代码在处理多路分支逻辑时更加简洁、灵活和强大。