Java 14:查看更新的switch语句

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值