JDK 14的新特性:switch表达式

简介: JDK 14的新特性:switch表达式

目录



简介


switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JEP 361: Switch Expressions (Standard)。


其实Switch新增的功能有两个,一个就是可以连写case,一个就是switch可以带返回值了。


写在前面


就在我兴致勃勃的想要创建一个以switch命名的package的时候,突然间发现在IDEA中居然创建不java类了。


经过我的再三尝试,反复改名,终于被我发现了隐藏在里面的小秘密:


java key word是不能被用在package名字中的。好吧,一直以来package的名字就那么多个,现在想创建一个拉风一点的,居然发现还有这样一个规则。


那么java key word有哪些呢? 下面就是了。


image.png


连写case


先看一个老版本的例子:


@Test
    public void useOldSwitch(){
        switch (MONDAY) {
            case MONDAY:
            case FRIDAY:
            case SUNDAY:
                System.out.println(6);
                break;
            case TUESDAY:
                System.out.println(7);
                break;
            case THURSDAY:
            case SATURDAY:
                System.out.println(8);
                break;
            case WEDNESDAY:
                System.out.println(9);
                break;
        }
    }


上面的例子中,我们想要匹配所有的星期,然后打印出相应的结果。写了很多个case语句,不美观。


再看一下新版本的例子:


@Test
    public void useNewSwitch(){
        switch (MONDAY) {
            case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
            case TUESDAY                -> System.out.println(7);
            case THURSDAY, SATURDAY     -> System.out.println(8);
            case WEDNESDAY              -> System.out.println(9);
        }
    }


一个漂亮的连写,将一切都带走。


注意这里switch语句没有返回值,所以并不需要default语句。


switch返回值


考虑一个在switch中赋值的情况:


@Test
    public void oldSwitchWithReturnValue(){
        int numLetters;
        switch (MONDAY) {
            case MONDAY:
            case FRIDAY:
            case SUNDAY:
                numLetters = 6;
                break;
            case TUESDAY:
                numLetters = 7;
                break;
            case THURSDAY:
            case SATURDAY:
                numLetters = 8;
                break;
            case WEDNESDAY:
                numLetters = 9;
                break;
            default:
                throw new IllegalStateException("这天没发见人!");
        }
    }


传统方式我们需要定义一个局部变量,并在case中给这个局部变量赋值。


我们看下怎么使用新版的switch替换:


@Test
    public void newSwitchWithReturnValue(){
        int numLetters = switch (MONDAY) {
            case MONDAY, FRIDAY, SUNDAY -> 6;
            case TUESDAY                -> 7;
            case THURSDAY, SATURDAY     -> 8;
            case WEDNESDAY              -> 9;
            default -> throw new IllegalStateException("这天没发见人!");
        };
    }


是不是非常简单。


注意,这里需要一个default操作,否则会报编译错误。因为可能存在未遍历的值。


yield


上面的switch返回值的情况,如果case后面的表达式比较复杂,那么就需要使用大括号来围起来。这种情况我们需要使用到yield来返回要返回的值。


@Test
    public void withYield(){
        int result = switch (MONDAY) {
            case MONDAY: {
                yield 1;
            }
            case TUESDAY: {
                yield 2;
            }
            default: {
                System.out.println("不是MONDAY,也不是TUESDAY!");
                yield 0;
            }
       };
    }


总结


本文介绍了JDK14中的switch新特性。也是唯一正式版本的新特性....


本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

相关文章
|
11天前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
25 3
|
16天前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
2月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
2月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
1月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
10 0
|
23天前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
100 3
|
2月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
43 1
|
2月前
|
Oracle Java 关系型数据库
Mac安装JDK1.8
Mac安装JDK1.8
378 4
|
3月前
|
Java Linux
Linux复制安装 jdk 环境
Linux复制安装 jdk 环境
63 3
|
2天前
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
5 0