jep290涉及jdk版本_JDK 12 – JEP 325开关表达式

jep290涉及jdk版本

JDK 12已于2019年3月19 日上线GA,继续致力于缩短发布周期和频繁发布。 该版本的功能部分可以在这里找到。 对于开发人员来说,有趣的功能之一是“ JEP 325开关表达式 ”,它可以作为预览功能使用。

此处定义的预览功能是:

预览语言或VM功能是Java SE平台的一项新功能,该功能已完全指定,完全实现但不是永久性的。 JDK功能发布中提供了该功能,以根据实际使用情况激发开发人员反馈。 这可能会导致它在将来的Java SE平台中永久存在。

在本文中,我将向您展示switch是如何从一个语句变成一个表达式的。 语句是可以执行但不会求值的东西,而表达式是在执行时可以求值的东西:

 //Statement  System.out.println( "This is a statement" );  //Expression  6 + 5 ; 

切换为表达式

开关作为表达式的语法已更改:

 Object switchResult = switch ( variable ) { case choice1 -> result1; case choice2 -> result2; default -> resultDefault;  } 

除了上述使用开关之外,它还可以用作语句:

 switch ( variable ) { case choice1: doSomeThing(); break ; case choice2: doOtherThing(); break ; default : doDefaultThing();  } 

我并没有打算介绍switch表达式。 你可以在这里阅读。 本文的其余部分将显示如何将开关用作表达式。 下面的代码片段显示了switch作为表达式的用法,请注意switch现在产生一个值,在这种情况下为boolean

 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 ; };  }  System.out.printf( "Fruit is %s\n" , isHealthy( "Fruit" )); 

从上面的代码片段中,我们可以看到开关中使用的表达式现在也可以是字符串。 这在语句和表达式中均适用。

如果要求值的表达式的值不是固定值,那么我们需要提供default块。 如果我们将enum用作开关表达式,则无需提供默认情况,因为枚举中可能的结果仅限于枚举值。 在下面的示例中显示:

 enum Food { Fruit, Vegetable, Pizza, Burger, Pulses, Soft_Drink  }  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 ; };  }  System.out.printf( "Pizze is %s\n" , isHealthEnumVersion(Food.Pizza)); 

另一个例子,我们将方法评估的结果作为表达式放入开关中:

 public static int evaluateLunch(Food food){ return switch (isHealthEnumVersion(food).toString()){ case "true" -> 10 ; case "false" -> 5 ; default -> 0 ; };  }  System.out.printf( "Your food received %d points\n" , evaluateLunch(Food.Burger)); 

代码块作为案例评估

在前面的示例中,我们看到案例是针对单行表达式进行映射的。 当我们需要针对案例评估代码块时,我们该如何处理?

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

您可能会注意到, break已得到增强,可以接受参数,该参数成为针对案例评估代码块的结果。

使用旧语法切换为表达式

我们可以坚持使用switch的旧语法,即不使用->符号,如下所示:

 public static int evaluateLunchOldWay(Food food){ return switch (isHealthEnumVersion(food).toString()){ case "true" : break 10 ; case "false" : break 5 ; default : break 0 ; };  } 

可以在这里找到本文的完整代码。

翻译自: https://www.javacodegeeks.com/2019/04/jdk-12-jep-325-switch-expressions.html

jep290涉及jdk版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笑傲江湖客户端服务器地址修改,《笑傲江湖》改键调整操作手把手教你玩笑傲...

《笑傲江湖》采用全新引擎AngelicaIII打造,秉承原著武侠精髓,首推新派动作武侠网游概念——融入动作及格斗游戏要素,强调真实的打击感与流畅的动作连贯度,并运用方向判定、位移闪避、移动战斗、攻防一体等多重技术手段&#xff0c…

Maven的maven-compiler-plugin插件详解

文章目录mvn compilemvn test-compile编译插件的配置mvn compile mvn compile 命令会将 src/main/resources 下的资源文件复制到编译输出目录下;接着会将 src/main/java 目录下源代码编译输出到编译输出目录下。编译输出目录默认是 target/classes 目录。 打开命令…

python数据处理常用函数_pytorch中的自定义数据处理详解

pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法。 :.getitem:返回一条数据或者一个样本,obj[index] obj.getitem(index). :.len:返回样本的数量 。…

raid重构原理_5个重构原理示例

raid重构原理这篇文章介绍了重构真正的开源代码( Gradle Modules Plugin )时应用的五​​种(最著名的)重构原理。 语境 当我为Gradle Modules Plugin (PR #73 ) 单独编译 module-info.java &am…

extjs ajax 遮罩层,[Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏

前言Load Mask(遮罩)效果,就是在页面还没有完全显示出来之前, 加上一个转装转的效果。类似:添加这样的效果有两个好处:1. 在页面没完全show出来之前, 把后面的页面给遮罩起来, 防止进行一些非法的操作。2. …

macOS下卸载文件系统_卸载移动硬盘_卸载U盘_推出移动硬盘_推出U盘

先使用命令 df -lh 在终端查看当前系统的所有挂载的文件系统(系统硬盘、移动硬盘、U盘等),命令如下: liaowenxiongliaowenxiongdeMacBook-Air ~ % df -h Filesystem Size Used Avail Capacity iused ifree %iused …

python isalnum函数_Python 字符串 (isdigit, isalnum,isnumeric)转

Python isdigit() 方法检测字符串是否只由数字组成。 语法 isdigit()方法语法: str.isdigit() 参数 无。 返回值 如果字符串只包含数字则返回 True 否则返回 False。 Python isdecimal() 方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。 注意:定…

zing jvm_Zing加快了JVM应用程序的预热

zing jvmJava虚拟机(JVM)提供了托管运行时环境,用于安全部署应用程序,其性能通常可以超过本机编译语言(如C和C )。 通过即时(JIT)编译进行垃圾回收和自适应编译的内存管理是两个最突…

黎明觉醒测试服服务器维护怎么办,黎明觉醒测试资格进不去怎么办

黎明觉醒测试资格进不去怎么办?黎明觉醒游戏在在9月16日迎来曙光测试,相信不少玩家都去玩了发现自己进不去游戏,这是怎么回事呢?和小编一起来看看吧。黎明觉醒测试资格进不去怎么办一、测试资格进不去获得测试资格的玩家官方已提前…

查看Linux命令_搜索Linux命令_查找Linux命令

站点1:https://tool.lu/command/ 站点2:https://www.linuxcool.com/

蜂鸣器音乐代码 天空之城_潮玩 | 艺术展览,乐队live现场,网红小黑泥,贩卖“美好”的市集……一场未来公共生活,天空之城和你一起探索!...

第一次打卡这样的新媒体艺术作品,不是画作,也不是艺术品陈列,而是一场看的见的引力交响曲~错落的磁场具象成看得见的流动痕迹,不动声响却震撼的感官体验。很容易让人沉浸其中,去捕捉流动的方向和瞬间。虽然UFO是没看到…

自动部署 管道 ci cd_自动化测试在CI CD管道中的作用

自动部署 管道 ci cd业界广泛采用的软件开发实践:持续集成和持续部署可确保良好地交付产品并经常交付。 常规代码提交需要常规/连续测试,而如果忽略它,则可能导致非弹性基础结构。 如何交付坚固的CI CD管道? 对于许多公司来说&…

Maven的maven-install-plugin插件详解

文章目录将下载到本地的jar文件安装到Maven本地仓库中将当前项目安装到Maven本地仓库中参考maven-install-plugin 插件的作用:1.可以将当前项目安装到 Maven 本地仓库,供本地其它 Maven 项目使用 执行 mvn install 命令将当前项目安装到 Maven 本地仓库…

python字典_Python 字典

1、什么是 dict(字典)上一章节,我们学习了列表(List) 和 元组(tuple) 来表示有序集合。而我们在讲列表(list)的时候,我们用了列表(list) 来存储用户的姓名。name [一点水, 两点水, 三点水, 四点水, 五点水]那么如果我们为了方便联系这些童鞋&#xff0c…

hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力

hazelcast如果要使用Hazelcast内存数据网格(IMDG)来加快数据库应用程序的速度,但是要处理数百个表怎么办? 手动编码所有Java POJO和序列化支持将需要数周的工作,完成后,手动维护该域模型将很快成为一场噩梦…

Maven的maven-help-plugin插件详解

执行下面的命令查看指定插件的详细信息: [~/Documents/IdeaProjects/demo02]$ mvn help:describe -Dpluginorg.apache.maven.plugins:maven-site-plugin:3.9.0 -Ddetail上述命令执行的是 maven-help-plugin 的 describe 目标,在参数 plugin 中输入需要描…

android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...

点击 机器学习算法与Python学习 ,选择加星标精彩内容不迷路本文转自机器之心在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy,已经有了非常之系统的中文文档,回想起当初细啃 NumPy 之时,不少人不得不徘徊于各大搜索引擎及…

tls jdk_使用JDK 13查看TLS配置

tls jdkJDK 13 Early Access Build 16现在可用,它带来的有趣的功能之一是能够使keytool命令行工具显示当前系统的TLS配置信息 。 这比尝试在单独的文档中查找受支持的TLS信息并将该信息与自己的JDK供应商和版本进行匹配要容易得多。 要查看JDK 13 Early Access Bui…

执行Plugins下的install:install报错:The packaging for this project did not assign a file to the build artif

文章目录导致错误的原因分析解决方法直接执行生命周期的某个阶段命令阶段和插件目标一起执行参考导致错误的原因分析 在 IDEA 中使用 Plugins 下的 install:install (或者在命令行下执行命令 mvn install:install),代表执行的是 install 插件…

javascript等待异步线程完成_前端:什么是单线程,同步,异步?彻底弄懂 JavaScript 执行机制...

javascript是按照语句出现的顺序执行的。js是一行一行执行的:let a 1;console.log(a);let b 2;console.log(b);然而实际上js是这样的:setTimeout(function(){ console.log(定时器开始啦)});new Promise(function(resolve){ console.log(马上执行for循环…