玩JDK 12的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编译器使我克服了刚刚显示的错误,但是随后提醒我,-- --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

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

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

相关文章

python 验证码_4行Python代码生成图像验证码

点击上方蓝色字体,关注我们最近无意看到网上有人使用Python编写几十行代码生成图像验证码,感觉很是繁琐,这里为各位朋友推荐两种方法,使用4行Python代码即可生成验证码。1captcha库第1步:安装captcha库pip install cap…

python3 多线程_Python3多线程爬虫实例讲解

多线程概述多线程使得程序内部可以分出多个线程来做多件事情,充分利用CPU空闲时间,提升处理效率。python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点,在threading 得到了弥补。并且在Python3中废弃了thread…

java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现

elasticsearch组合多条件查询实现restful api以及java代码实现实际开发中,基本都是组合多条件查询。elasticsearch提供bool来实现这种需求;主要参数:must文档 必须 匹配这些条件才能被包含进来。must_not文档 必须不 匹配这些条件才能被包含进…

基于java家教管理系统_基于jsp的家教信息管理-JavaEE实现家教信息管理 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的家教信息管理, 该项目可用各类java课程设计大作业中, 家教信息管理的系统架构分为前后台两部分, 最终实现在线上进行家教信息管理各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家教信息管理相关的实体…

如何从云功能调用外部REST API

在之前的博客文章中,我展示了如何创建您的第一个云功能 (以及一个视频 )。 您的云函数很可能需要调用外部REST API。 以下教程将向您展示如何创建此类功能(非常简单)。 登录到IBM Cloud帐户 点击目录 删除标签&…

机器学习分类算法_机器学习分类算法

人们曾在自身的神经元得到启发,将机器学习中给出的特征输入与权重之积作为输出与阈值作比较,得到0或者1的输出。这就是我们感知器的实现原理感知器在实现过程中的步骤如下:①将权值初始化称为一个很小的向量②迭代训练所有样本:计…

apache camel_Apache Camel –从头开始开发应用程序(第1部分/第2部分)

apache camel开始之前 前段时间,我写了一篇关于Spring Integration的教程,以演示如何在受现实发票处理系统启发的示例应用程序中使用Spring Integration。 我对此非常满意,因此我决定向您展示如何使用Apache Camel(Spring Integra…

weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?

图文是工作,视频是生活。大家好,我是 骑士分享 欢迎您的关注!摩托车淋雨后启动不了什么原因?如何解决?这种现象对于电喷车型来说发生的几率并不大,原因就在于电喷车型的线路防水能力会更强,供油…

前端开始学java_[Java教程]开启前端学习之路

[Java教程]开启前端学习之路0 2014-06-10 17:00:06前言第一次在博客园写博客,写写自己开启前端学习之路。应该是受邢师兄的影响吧,不得不说邢师兄人很好,学习也很认真,师兄的前端也是自学的,但是学的很好,大…

xalan_如何以10倍速加速Apache Xalan的XPath处理器

xalan一段时间以来, Apache Xalan中存在一个令人尴尬的错误,该错误是XALANJ-2540 。 此错误的后果是Xalan每次XPath表达式求值将内部SPI配置文件加载数千次 ,可以很容易地进行如下测量: 这个: Element e (Element)do…

vim循环下表复制_Vimrc Init.vim太长了?不存在的

精简配置刚开始接触vim,你会被它各种好看的外观以及实用的插件吸引,各种折腾,不知不觉你的vimrc或者init.vim变得特别长,我之前的init.vim有多长?596行?wtf?每次维护的时候不知道有多麻烦&#…

visual studio odbc数据源设计器_NEW!WinForm界面开发设计时正式支持.NET 5

点击“了解更多”获取DevExpress v20.2完整版下载早在今年7月,官方技术团队宣布对DevExpress控件进行功能增强,使其支持最新的.NET 5 Preview。 但是尽管技术团队一直在努力确保WinForms控件与.NET 5兼容但在Visual Studio中对设计器的支持却是另一回事。…

java 接口的观察者模式_java观察者模式

观察者模式又叫做发布-订阅(Publish/Subscribe)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自己更新自己。Observer结构图.pngSubj…

webgis从基础到开发实践_ArcGIS API For Javascript 开发笔记(四)

二、应用篇1、应用部署部署也就意味着一个 DEMO 或者系统即将完工,也意味着系统即将上线,相对来说Javascript 应用的部署不是很复杂,但是这是有前提的,要对部署中的一些概念有所了解,比如部署中常常提到的虚拟目录&…

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

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

geteditor p 取消自动_2020百度网盘超级会员怎么取消自动续费?

首先我们打开百度网盘,开通超级会员以后,可以看到个人中心有一个管理自动续费的,点击打开。2然后可以看到自己开通的界面旁边显示的有一个取消按钮。3点击取消以后,会提示我们自动续费享受的有优惠,我们继续点击确认取…

分布式机器学习_229页,CMU博士张昊毕业论文公布,探索机器学习并行化的奥秘...

CMU 机器人研究所张昊(Hao Zhang)博士论文新鲜出炉,主要围绕着机器学习并行化的自适应、可组合与自动化问题展开。机器之心报道,机器之心编辑部。随着近年来,机器学习领域的创新不断加速,SysML 的研究者已经…

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

业务专家向我们(开发人员)解释业务限制。 但是,如何确保我们正确理解它们呢? 或更糟糕的是,一旦约束条件正式化,我们如何测试他们之间是否同意? 好吧,有一种很棒的方法可以做到这一…

矩阵连乘 动态规划_Java动态规划

1. 介绍动态规划典型的被用于优化递归算法,因为它们倾向于以指数的方式进行扩展。动态规划主要思想是将复杂问题(带有许多递归调用)分解为更小的子问题,然后将它们保存到内存中,这样我们就不必在每次使用它们时重新计算它们。要理解动态规划的…

分布式光伏补贴_光伏发电上网电价政策综述

原标题:光伏发电上网电价政策综述近些年,光伏发电上网电价相关政策不断推陈出新,在推进平价上网的同时,也积极对接了电力市场建设需要。本文梳理了光伏发电上网电价及补贴标准有关政策,供参考使用:1.普通光…