jdk12 switch_玩JDK 12的Switch表达式

jdk12 switch

在博客文章“操作中的JDK语言功能预览:切换表达式 ”中,我讨论了JEP 325 [“切换表达式( 预览 )”)如何作为指定的“ 预览语言功能 ”的早期应用,如JEP 12所述。预览语言和VM功能”]。 JEP 325 针对JDK 12 。 更好的是, JDK 12的抢先体验版已经提供了对该预览语言功能的支持!

正如我以前的博客文章“ Switch Expressions Coming to Java? ”中所展示的那样,我对与switch表达式相关的可能性感到很兴奋。 ”,“ 通过引入switch表达式来增强Java switch语句 ”以及前面提到的“ JDK语言功能预览:switch表达式” 。 JDK 12 Early Access Builds使得开始尝试使用此预览语言功能非常容易,我将使用JDK 12 Early Access Build 10(2018/9/6)进行演示本文撰写时为最新版本)。

切换表达式

我不会花任何额外的精力来提出我自己的开关表达式的创意示例,而是借用了JEP 325本身(在“描述”部分的早期)中当前提供的示例之一。 此示例实际上是增强的switch 语句,而不是switch 表达式 ,但是它需要相同的语言预览支持,并且是该功能的一部分。 接下来显示该修改示例的代码清单。

package dustin.examples.jdk12.switchexp;public class SwitchExpressionsDemo
{/*** This example is adopted from the JEP 325 text* (http://openjdk.java.net/jeps/325).** @param k Value to be switched upon.*/static void howMany(final int k){switch (k){case 1 -> System.out.println("one");case 2 -> System.out.println("two");case 3 -> System.out.println("many");}}/*** Execute demonstration discussed in JEP 325 using custom* method {@link #howMany(int)}.*/public static void demonstrateHowMany(){howMany(1);howMany(2);howMany(3);}public static void main(final String[] arguments){demonstrateHowMany();}
}

当我尝试使用不带任何特殊标志的JDK 12 javac编译器编译以上代码时,我看到错误消息:“错误:切换规则是预览功能,默认情况下处于禁用状态。” 该错误消息还提供了有用的提示,“(使用--enable-preview启用切换规则)”。

切换表达式

--enable-preview标志传递给JDK 12 javac编译器可以使我javac刚刚显示的错误,但是随后提醒我,-- --enable-preview标志应与-source标志或--release标志。 错误消息明确指出:“错误: --enable-preview --release --enable-preview必须与-source--release一起使用。

切换表达式

我选择将--release 12标志与--enable-preview结合使用,并允许编译增强的switch语句演示示例。

切换表达式

增强的switch语句示例使用传递给JDK 12 javac编译器的--enable-preview--release 12选项进行编译,但是如最后一个屏幕快照中的输出所示,有一条消息指出已编译的类“使用预览语言功能”,并建议“使用-Xlint:preview重新编译以获取详细信息”。 下一个屏幕快照演示了指定-Xlint:preview的结果:

切换表达式

在编译开关表达式演示示例时,将-Xlint:preview标志传递给JDK 12 javac编译器时,导致使用开关表达式( ->语法)指向指向特定代码行的三条警告消息,并指出“警告:[preview]切换规则是一种预览功能,在以后的版本中可能会删除。”

通过增强的switch语句代码编译,现在可以尝试运行代码了。 如果在没有任何标志指示使用预览功能的情况下调用JDK 12 java启动程序,则会显示错误消息:“ java.lang.UnsupportedClassVersionError:未启用预览功能……尝试使用'-enable-preview'运行。”

切换表达式

--enable-preview传递给JDK 12 java启动器时,演示将成功运行,如下一个屏幕快照所示。

切换表达式

将最后一个屏幕快照中显示的输出与本文开头阐述的增强的switch语句演示的源代码进行比较时,可以快速地进行一些观察。 也许最引人注目的是,有没有break的例子说明,但没有落空发生尽管没有break的陈述。 这正是开关表达式和增强型开关语句应发生的JEP 325状态:“如果标签匹配,则仅执行箭头标签右边的表达式或语句;如果匹配,则仅执行箭头标签右边的表达式或语句。 没有失败。” “箭头”(->)的存在表示我们正在使用switch表达式或增强型switch语句,其中表达式或语句将完全由“ arrow”右边的内容来解析(因此,没有明显的break是需要)。 在switch表达式或增强的switch语句中,带有“分号”(而不是“箭头”)的关联break允许指定多行。

还有更多与开关表达式和增强型switch语句有关的内容,并可以进行尝试。 但是,本文着重介绍了JDK 12早期访问版本中开关表达式的可用性和增强的开关语句支持,并提供了该支持的简单示例。 开始使用Java开关表达式和增强的开关语句非常令人兴奋! 考虑一个没有切换失败的世界也是令人兴奋的! 这只是JDK 12的“预览”功能,但是我很期待交换机失败的开始。

翻译自: https://www.javacodegeeks.com/2018/09/playing-with-jdk-12s-switch-expressions.html

jdk12 switch

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

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

相关文章

VueJS生命周期

一、生命周期 vue在生命周期中有这些状态, beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed。Vue 在实例化的过程中,会调用这些生命周期的钩子,给我们提供了执行自定义逻辑的机会。 vue对象初始化过…

Linux的命令之 man -- 查看帮助文档

文章目录浏览文本内容的快捷键向前滚屏向后滚屏跳跃搜索使用这个命令可以查看任何命令的在线帮助文件,例如,查看命令 find 的在线帮助文档: [roothtlwk0001host ~]# man find打开命令的帮助文档后,可以使用鼠标滚轮上下滚动来浏览…

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

jdk8切换成jdk6JEP 12 [“预览语言和VM功能”]在其主页上描述如下: 预览语言或VM功能是Java SE平台的一项新功能,该功能已完全指定,完全实现但不是永久性的。 JDK功能发布中提供了该功能,以根据实际使用情况激发开发人员反馈。 这…

VueJS ajax综合案例

一、目录结构和注意事项 1.目录结构 2.注意事项 &#xff08;1&#xff09;data.html里面的Vue &#xff08;2&#xff09;箭头函数 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0…

Linux 下如何查找 MySQL 数据库的数据根目录呢?

笔者的服务器系统和MySQL版本如下&#xff1a; [roothtlwk0001host ~]# mysql -V mysql Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using EditLine wrapper [roothtlwk0001host ~]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core) MySQL 的配置文件路径…

libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束

libreoffice业务专家向我们&#xff08;开发人员&#xff09;解释业务限制。 但是&#xff0c;如何确保我们正确理解它们呢&#xff1f; 或更糟糕的是&#xff0c;一旦约束条件正式化&#xff0c;我们如何测试他们之间是否同意&#xff1f; 好吧&#xff0c;有一种很棒的方法可…

VueJS ajax综合案例(修改用户信息实现步骤)

修改用户信息 1.过程演示 2.代码实现

MacOS下如何通过命令搜索文件和打开文件

文章目录find 命令查找名称含有指定关键词的文件和目录locate 命令查找以指定字符串结尾的文件路径查看命令 locate 的使用说明mdfind 命令查找名称中含有指定关键词的文件搜索内容中包含指定关键词的文件在指定目录中搜索内容包含指定关键词或者名称含有指定关键词的文件搜索并…

多云和混合云_多云互操作性!=云服务聚合

多云和混合云多云定义为一种方法&#xff0c;该方法将来自多个云供应商的多个云&#xff08;公共云或私有云&#xff09;组合在一起。 但是&#xff0c;这不是来自不同供应商的各种服务的集合&#xff0c;它需要一种强制性的胶合剂–云不可知的方法&#xff0c;并在所有提供商之…

安装、启动、配置zookeeper(window版)

安装zookeeper (1)解压安装包 &#xff08;2&#xff09;修改zoo_sample.cfg文件名为&#xff1a;zoo.cfg (3)在加压文件下建立data文件夹 &#xff08;4&#xff09;修改zoo.cfg (5)启动 注意如果zookeeper启动失败有可能是&#xff0c;第二步的zoo_sample.cfg文件名没改&…

命令终端(CMD)自动补全功能 — Tab Complete 功能

处理特殊字符 如果目录中有特殊字符&#xff08;空格&#xff0c;括号&#xff0c;引号&#xff0c;[]&#xff0c;!&#xff0c;$&#xff0c;&&#xff0c;*&#xff0c;;&#xff0c;|&#xff0c;\&#xff09;&#xff0c;必须使用特殊的语法来表示这些字符。例如&am…

自动驾驶行车记录仪训练集_无服务器安全性:将其置于自动驾驶仪上

自动驾驶行车记录仪训练集Ack &#xff1a;本文是从个人经验以及从无服务器安全性的其他多个来源学到的东西的混合。 我无法在这里列出或确认所有这些信息&#xff1b; 但是&#xff0c;应该特别感谢The Register &#xff0c; Hacker Noon &#xff0c; PureSec以及Serverless…

MySQL数据库模式(SQL_MODE)中的STRICT_TRANS_TABLES和STRICT_ALL_TABLES

-InnodbMyisamSTRICT_TRANS_TABLES无论插入单行或是多行&#xff0c;只要插入数据与字段类型不兼容&#xff0c;则insert操作失败并回滚插入单行数据与字段类型不兼容&#xff0c;则insert操作失败并回滚&#xff1b;插入多行数据&#xff0c;如果插入数据的第一行内容与字段类…

spock 集成测试_Spock 1.2 –轻松进行集成测试中的Spring Bean模拟

spock 集成测试探索如何使用Spock 1.2将Spock的模拟和间谍自动注入到Spring上下文中。 Spock中的存根/模拟/间谍&#xff08;及其生命周期&#xff09;一直与Spock Specification类紧密结合。 只能在测试类中创建它们。 因此&#xff0c;使用共享的&#xff0c;预定义的模拟&a…

dubbo中log4j检查(开发环境中建议设置为false)

一、在pom.xml里面引入依赖 1. 添加log4j文件 2. 文件内容 # Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategoryINFO, CONSOLE debug info warn error fatal log4j.rootCategorydebug, CONSOLE, LOGFILE, info # Set…

Linux 命令之 useradd -- 添加用户

文章目录简介相关文件内容说明常用选项参考示例添加新用户 test添加新用户 test&#xff0c;且不创建家目录&#xff0c;并且禁止登陆添加新用户 test&#xff0c;指定 UID 为 888&#xff0c;指定归属用户组为 root&#xff0c;cool&#xff0c;其默认使用的 shell 类型为 /bi…

idea 构建spring_以Spring方式构建企业Java应用程序

idea 构建spring我认为可以说Java EE在Java开发人员中享有很高的声誉。 尽管多年来确实在各个方面都有所改善&#xff0c;甚至将其改名为Eclipse Foundation成为Jakarta EE &#xff0c;但其苦味仍然相当强烈。 另一方面&#xff0c;我们拥有Spring框架 &#xff08;或者为了更…

入门案例Maven搭建SpringBoot工程

一、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

Linux 命令之 passwd -- 修改用户账号密码

文章目录简介相关文件常用选项参考示例修改当前登陆的账户密码修改其他用户密码读取标准输入的值&#xff0c;设置成指定用户的密码锁定密码不允许用户修改解除锁定密码&#xff0c;允许用户修改下次登陆强制改密码清除登录密码。清除之后登录时无需密码&#xff0c;风险极大&a…

自动化测试特定区域滑动_自动化用户特定实体的访问控制

自动化测试特定区域滑动实际上&#xff0c;每个Web应用程序都应该有多个用户&#xff0c;并且每个用户都有一些数据-帖子&#xff0c;文档&#xff0c;消息等等。 最明显的事情是保护这些实体免遭非这些资源合法所有者的用户获取。 不幸的是&#xff0c;这不是最容易的事情。 …