玩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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值