• 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表达式的值

     

     

  • 相关阅读:
    mmap函数实现
    linux交换空间
    日志式文件系统
    Linux内核书籍
    进程状态
    form表单中enctype="multipart/form-data"的作用
    php导入excel表格
    什么是隐藏域
    把生成的excel文件直接提供为下载页效果
    到底什么是实例化
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12790487.html
Copyright © 2020-2023  润新知