2020年3月发布的JDK 14附带了switch语句的更新版本。 这是JDK 12和JDK 13中的预览功能。
要了解差异,让我们看一个简单的示例。 假设我们要基于DayOfWeek枚举来计算每日工作时间。
使用旧的使用switch语句的方法,我们的解决方案可能如下所示:
DayOfWeek day = ... float expectedWorkingTime; switch (day) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
expectedWorkingTime = 8f;
break ;
case FRIDAY:
expectedWorkingTime = 6f;
break ;
default :
expectedWorkingTime = 0f; }
使用新的switch语句(或表达式),我们可以像这样重写示例:
DayOfWeek day = ... final float expectedWorkingTime = switch (day) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY -> 8f;
case FRIDAY -> 6f;
default -> 0f; };
因此,新功能:
- switch关键字可用作表达式并返回一个值。 在此示例中,开关返回的值被分配给ExpectedWorkingTime。 请注意,这使我们可以使ExpectedWorkingTime为final,这在以前的解决方案中是不可能的。
- 一个case语句可以包含多个值,以逗号分隔。
- 在case语句中,冒号替换为箭头(->)
- 使用箭头(->)语法时,不需要break关键字。 如果您更喜欢使用break,则在某些情况下仍可以使用较早的冒号语法。
新的收益声明
在前面的示例中,我们在箭头(->)的右侧返回一个简单值。 但是,也许我们需要首先计算该值,为此我们可能需要一些额外的代码行。
例如:
final float expectedWorkingTime = switch (day) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY -> {
if (isFullTimeEmployee) {
yield 8 ;
}
yield 4 ;
}
case FRIDAY -> 6f;
default -> 0f; };
在这里,我们在第一个case语句中使用一个代码块来确定工作时间。 使用新的yield语句,我们从case块返回一个值(就像在方法中使用return一样)。
您可以在GitHub上找到本文中显示的示例。
翻译自: https://www.javacodegeeks.com/2020/04/java-14-looking-at-the-updated-switch-statement.html