在我以前的文章中 ,我写了有关作为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

JDK 14 – JEP 361从预览中切换表达式相关推荐

  1. jep290涉及jdk版本_JDK 14 – JEP 361从预览中切换表达式

    jep290涉及jdk版本 在我的前一篇文章中 ,我写了有关作为JDK 12的预览功能发布的开关表达式和相关增强功能的信息.随后,在JDK 13中提出了一些更改,例如使用yield关键字从switch ...

  2. jdk8切换成jdk6_运行中的JDK语言功能预览:切换表达式

    jdk8切换成jdk6 JEP 12 ["预览语言和VM功能"]在其主页上描述如下: 预览语言或VM功能是Java SE平台的一项新功能,该功能已完全指定,完全实现但不是永久性的. ...

  3. JDK语言功能预览:切换表达式

    JEP 12 ["预览语言和VM功能"]在其主页上描述如下: 预览语言或VM功能是Java SE平台的一项新功能,该功能已完全指定,完全实现但不是永久性的. JDK功能发布中提供了 ...

  4. 运行orbslam2出现 段错误 (核心已转储)_JDK 14已发布快速预览16个新特性

    JDK 14已经于2020年3月17日如期发布.本文介绍JDK 14特性. JEP 305: instanceof的模式匹配(预览) 通过对instanceof运算符进行模式匹配来增强Java编程语言 ...

  5. JDK 14 / JEP 305模式匹配“ Smart Casts”实例

    我通常将Java代码中instanceof运算符的存在视为" 红色标志 ",这意味着在某些情况下使用instanceof不一定是错误的,但是使用它有时表示可以以一种更干净的方式解决 ...

  6. 我的世界1.14java原版命令_我的世界1.14.4第一个预览版发布 添加了debugreport命令...

    原标题:我的世界1.14.4第一个预览版发布 添加了debugreport命令 预发布版是Minecraft的测试机制,如果该版本作为正式版发布,那么预发布版的游戏文件将与启动器推送的正式版完全相同. ...

  7. 解决pdf打印预览中遇到特殊字符,导出失败问题

    解决pdf打印预览中遇到特殊字符,导出失败问题 参考文章: (1)解决pdf打印预览中遇到特殊字符,导出失败问题 (2)https://www.cnblogs.com/king-xg/p/697236 ...

  8. word文档打印预览有阴影_在打印预览中编辑Microsoft Word 2007文档

    word文档打印预览有阴影 When working on Word 2007 documents for the office wouldn't it be nice to edit them wh ...

  9. Excel中如何删除打印预览中最后的空白页?

    1.进入"分页预览"模式,方法:在Excel底端,点击右下角分页模式按钮 2.在分页模式下,我们发现有最后一个蓝色边框的空白列,此空白列中标识这空白页的页码,鼠标悬停蓝色边框内,右 ...

最新文章

  1. 在Spring3中,配置DataSource的方法有五种
  2. 安卓双摄像头录像_android开发之调用手机的摄像头使用MediaRecorder录像并播放_Android_脚本之家...
  3. 一文让你了解RT-Thread
  4. 企业文件存储服务器规划,企业文件存储服务器
  5. 基于java高德地图经纬度转详细地址和GPS坐标转换为高德地图坐标
  6. 这几天阿里云发生故障事件,身为程序员慌得一批……
  7. 对称数 一个整数,它的各位数字如果是左右对称的,则称这个数是对称数。例如:1234321、123321等。
  8. Busting Frame Busting: a Study of Clickjacking Vulnerabilities on Popular Sites
  9. 【计算机基础】思维导图
  10. c语言vc里设置光标位置,VC设置鼠标光标方法
  11. Velodyne VLP16激光雷达的使用(非常详细)
  12. 计算机屏幕上怎么会有条竖杠,电脑屏幕出现一条竖线
  13. 作文提升~老师整理的优美比喻句太实用
  14. 浙江一盗窃案犯罪嫌疑人陪朋友去警局“打酱油”被抓
  15. 【深度学习】卷积概念以及卷积核层数
  16. laravel生成微信公众号带参数二维码并响应扫描带参数二维码
  17. 【算法】几分钟时间让你彻底学会—时间复杂度
  18. 计算机网络鲍卫兵答案,之江浙工大之江学院1314(1)课程表校区1.doc
  19. 网易起花名,阿里赚吆喝
  20. matlab输入信号,[转]simulink中如何输入信号

热门文章

  1. POJ1611-嫌犯【图论,并查集】
  2. 【模拟】交换(jzoj 1518)
  3. 一分钟理解Java包装类型
  4. Java自动化邮件中发送图表(一)
  5. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
  6. 教你如何监控 Java 线程池运行状态
  7. winform实现简单的计算器V1版本
  8. JAVA常用的环境变量配置
  9. 可以代表学计算机的标志,桌面上的图标可以用来表示
  10. delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点