JDK 14 – JEP 361从预览中切换表达式

在我以前的文章中 ,我写了有关作为JDK 12的预览功能发布的开关表达式和相关增强功能的信息。随后,在JDK 13中提出了一些更改,例如使用yield关键字从switch块返回值并在预览中发布。

在即将于明年3月在GA上发布的即将发布的JDK 14版本中,这些switch更改将无法预览,并将永久且永久化。 在本文中,我们将研究两个版本之间的变化,并重新运行我在上一篇关于JDK 14的文章中共享的示例。

切换为表达式

在下面的代码片段中,我们将看到如何将switch用作表达式,即评估一些条件并返回值:

 public static boolean isHealthy(String food){ 
     return switch (food){ 
         case "Fruit" -> true ; 
         case "Vegetable" -> true ; 
         case "Pizza" -> false ; 
         case "Burger" -> false ; 
         case "Pulses" -> true ; 
         case "Soft Drink" -> false ; 
         default -> false ; 
     };  } 

我们可以使用字符串文字作为大小写表达式,而在JDK 12之前是不可能的。以上情况可以使用Enums编写,在这种情况下,我们不需要default块:

 public static Boolean isHealthEnumVersion(Food food){ 
     return switch (food){ 
         case Fruit -> true ; 
         case Vegetable -> true ; 
         case Pizza -> false ; 
         case Burger -> false ; 
         case Pulses -> true ; 
         case Soft_Drink -> false ; 
     };  } 

Food枚举定义为:

 enum Food { 
     Fruit, Vegetable, Pizza, Burger, Pulses, Soft_Drink  } 

使用代码块切换表达式以进行案例评估

在前面的示例中,我们看到该case仅处理单个行表达式。 如果我们想执行多个语句然后返回结果怎么办? 这可以使用yield关键字实现。

在JDK 12中, break关键字被重载以返回该值。 但这并不是所有人都喜欢的,因此添加了新的关键字yield来返回值。

下面的代码段执行一个代码块并返回一个值:

 public static PreparedFood prepareFood(Food food){ 
   return switch (food){ 
     case Pizza -> { 
       System.out.println( "doing pizza related operations" ); 
       yield new PreparedFood(food); 
     } 
     case Burger -> { 
       System.out.println( "Doing burger related operations " ); 
       yield new PreparedFood(food); 
     } 
     default -> { 
       System.out. printf ( "Doing %s related operations\n" , food.toString()); 
       yield new PreparedFood(food); 
     } 
   };  } 

yield也可以在旧的switch语法中使用,如下所示:

 public static PreparedFood prepareFoodOldSyntax(Food food){ 
   return switch (food){ 
     case Pizza: 
       System.out.println( "doing pizza related operations" ); 
       yield new PreparedFood(food); 
     case Burger: 
       System.out.println( "Doing burger related operations " ); 
       yield new PreparedFood(food); 
     default : 
       System.out. printf ( "Doing %s related operations\n" , food.toString()); 
       yield new PreparedFood(food); 
   };  } 

源代码可以在此处的存储库中找到

翻译自: https://www.javacodegeeks.com/2020/01/jdk-14-jep-361-switch-expressions-out-from-preview.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值