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

jdk12 switch_玩JDK 12的Switch表达式相关推荐

  1. 玩JDK 12的Switch表达式

    在博客文章"操作中的JDK语言功能预览:切换表达式 "中,我讨论了JEP 325 ["切换表达式( 预览 )")如何作为指定的" 预览语言功能 &qu ...

  2. JDK 12开关表达式遇到意外的枚举值

    正如我在" 玩JDK 12的Switch表达式 "一文中所写的那样, JDK 12 Early Access Build使JEP 325的实现(" Switch Expr ...

  3. JDK 12:实际中的切换语句/表达式

    我的上一篇文章" 玩JDK 12的Switch表达式 "讨论了如何使用JDK 12 Early Access Builds尝试JEP 325 switch 表达式和语句,并提供了一 ...

  4. Java SE 12扩展Switch语句/表达式完整指南

    本文提供了Java SE 12扩展Switch语句/表达式的完整指南.文章详细介绍了扩展Java switch语句将其用作增强版switch语句或表达式.为帮助理解本文提供了具体案例. 本文要点 现在 ...

  5. JDK 14的新特性:switch表达式

    文章目录 简介 写在前面 连写case switch返回值 yield 总结 简介 switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JE ...

  6. java switch 表达式_尝鲜Java 12新特性:switch表达式

    Java 12将在两个月后(2019/3/19)发布,现已进入RDP1阶段,确定加入8个JEP.其中对Java语法的改进是JEP 325: switch表达式.于是我迫不及待,提前感受一下更先进的语言 ...

  7. Java 12 switch表达式新特性(->,yield)

    switch表达式 使用switch时,如果遗漏了break,就会造成严重的逻辑错误,而且不易在源代码中发现错误.从Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pa ...

  8. switch字符串jdk_从JDK 12删除原始字符串文字

    switch字符串jdk 已经提出从JDK 12中删除原始字符串文字(预览) (它将在12月13日进入Rampdown第一阶段 ). Brian Goetz撰写了删除此预览功能的动机的详细说明 ( J ...

  9. 还没用上 JDK 11吧,JDK 12 早期访问构建版使用

    JDK 更新速度快的飞起,JDK 12 早期访问构建版已发布,你现在用到了第几版本? 本周Java的最大新闻可能是JDK 11的正式发布.不过在 6 月底,JDK 11 就已经进入了 Rampdown ...

最新文章

  1. apache nginx禁止跨目录访问
  2. Image Semantic Segmentation之DeepLab两个坑
  3. Python基础-----pickle模块
  4. JavaScriptDate对象
  5. 前端传中文文件名_前端工程师需要掌握哪些知识,web前端开发规范总结
  6. python基本随机生成函数_Python学习笔记(三):随机生成函数方法
  7. HTML <dfn> 标签的简单介绍
  8. 增量导出_[华为]一种实用的增量式深度CTR模型训练方法
  9. hdu 1806 Frequent values 线段树
  10. 互动留言赠书:《Oracle高性能系统实战大全》
  11. mysql 表关系传递,mysql数据表之间数据相互传递的问题
  12. 进击的UI------------UIToolBar(bottom导航条)
  13. Unity3D调用外部程序
  14. java中Field中的方法,解析Java中的Field类和Method类
  15. 操作系统课程设计--文件系统
  16. MFC采用定时器绘制简单动画
  17. 计算机文化基础十一版百度云,计算机文化基础(高职高专版 第十一版)第一章答案...
  18. 红孩儿编辑器的输入法模块的函数依赖关系图
  19. matlab能不能求不定积分,用MATLAB求定积分
  20. 摩斯密码(Morse)——python解密

热门文章

  1. P2680-运输计划【LCA,树上差分,二分答案】
  2. ssl1341-最小路径覆盖【最大匹配,最小路径覆盖,图论】
  3. 2018-2019 ACM-ICPC, Asia Seoul Regional Contest——A - Circuits
  4. 【结论】只不过是长的领带(luogu 6877)
  5. BZOJ3527: [Zjoi2014]力 [FFT]
  6. codeforces gym-101755 I-Guess the Tree 交互题、分治、树的直径
  7. JFreeChart(四)之线型图
  8. laravel构造器的CURD
  9. 这是什么操作?java中的变量竟然可以先使用后声明?
  10. 《四世同堂》金句摘抄(十二)