JEP 361: Switch表达式

Posted dalianpai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JEP 361: Switch表达式相关的知识,希望对你有一定的参考价值。

JEP 361: Switch表达式 (标准)

JEP 361: Switch Expressions (Standard)

引入

扩展switch分支选择语句的写法。Switch表达式在经过JDK 12 和JDK13的预览之后,在JDK 14中已经稳定可用。

设计初衷

Java的switch语句是一个变化较大的语法(可能是因为Java的switch语句一直不够强大、熟悉swift或者js语言的同学可与swift的switch语句对比一下,就会发现Java的switch相对较弱),因为Java的很多版本都在不断地改进switch语句:JDK 12扩展了switch语句,使其可以用作语句或者表达式,并且传统的和扩展的简化版switch都可以使用。

JDK 12对于switch的增强主要在于简化书写形式,提升功能点。 下面简单回顾一下switch的进化阶段:

  • 从Java 5+开始,Java的switch语句可使用枚举了。

  • 从Java 7+开始,Java的switch语句支持使用String类型的变量和表达式了。

  • 从Java 11+开始,Java的switch语句会自动对省略break导致的贯穿提示警告。

  • 但从JDK12开始,Java的switch语句有了很大程度的增强。

  • JDK 14的该JEP是从JEP 325JEP 354演变而来的。但是,此JEP 361 Switch表达式 (标准)是独立的,并且不依赖于这两个JEP。

以前的switch程序

代码如下:

 技术图片

这是经典的Java 11以前的switch写法 ,这里不能忘记写break,否则switch就会贯穿、导致程序出现错误(JDK 11会提示警告)。

JDK 14不需要break了

在JDK 12之前如果switch忘记写break将导致贯穿,在JDK 12对switch的这一贯穿性做了改进。你只要将case后面的冒号(:)改成箭头,那么你即使不写break也不会贯穿了,因此上面程序可改写如下形式:

 技术图片

上面代码简洁很多了。

JDK 14的switch表达式

JDK 12之后的switch甚至可作为表达式了——不再是单独的语句。例如如下程序。

 技术图片

上面程序直接将switch表达式的值赋值给s变量,这样switch不再是一个语句,而是一个表达式.

JDK 14中switch的多值匹配

当你把switch中的case后的冒号改为箭头之后,此时switch就不会贯穿了,但在某些情况下,程序本来就希望贯穿比如我就希望两个case共用一个执行体!JDK 12之后的switch中的case也支持多值匹配,这样程序就变得更加简洁了。例如如下程序。

 技术图片

JDK 14的Yielding a value

当使用箭头标签时,箭头标签右边可以是表达式、throw语句或是代码块。如果是代码块,需要使用yield语句来返回值。下面代码中的print方法中的default语句的右边是一个代码块。在代码块中使用yield来返回值。,JDK 14引入了一个新的yield语句来产生一个值,该值成为封闭的switch表达式的值

 技术图片

 技术图片

以上是关于JEP 361: Switch表达式的主要内容,如果未能解决你的问题,请参考以下文章

为啥不完整的switch表达式编译成功

尝鲜Java 12新特性:switch表达式

JDK14来了:9大重磅特性解读,不容错过!!!

重新复习一下JDK14的9大重磅特性

JEP 305: InstanceOf

JDK13,预计2019 年 9 月发布