JDK 14的新特性:switch表達式

簡介

switch的新特性但是源遠流長,早在JDK 12就以預覽功能被引入了,最終在JDK 14成爲了正式版本的功能:JEP 361: Switch Expressions (Standard)。java

其實Switch新增的功能有兩個,一個就是能夠連寫case,一個就是switch能夠帶返回值了。git

寫在前面

就在我興致勃勃的想要建立一個以switch命名的package的時候,忽然間發如今IDEA中竟然建立不java類了。github

通過個人再三嘗試,反覆更名,終於被我發現了隱藏在裏面的小祕密:spa

java key word是不能被用在package名字中的。好吧,一直以來package的名字就那麼多個,如今想建立一個拉風一點的,竟然發現還有這樣一個規則。code

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

連寫case

先看一個老版本的例子:blog

@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語句,不美觀。get

再看一下新版本的例子:博客

@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);
        }
    }
複製代碼

一個漂亮的連寫,將一切都帶走。string

注意這裏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新特性。也是惟一正式版本的新特性....

本文的例子github.com/ddean2009/l…

本文做者:flydean程序那些事

本文連接:www.flydean.com/jdk-14-swit…

本文來源:flydean的博客

歡迎關注個人公衆號:程序那些事,更多精彩等着您!

相關文章
相關標籤/搜索