AdSense

網頁

2022/3/29

Java Switch Expression用法

Java Switch Expressions用法如下。


Switch expressions是Java 12引入的新switch case語法(JEP 325),且在Java 13加入了yield關鍵字(JEP 354)。從Java 14開始此功能成為永久特色(permanent feature)(JEP 361)。

範例環境:

  • Java 17

原本的switch case敘述如下。每個case要用break避免繼續往下面的case走(fall through)。

Main.java

package com.abc.demo;

public class Main {

    public static void main(String[] arges) {
        var color = Color.WHITE;

        var value = 0;
        switch (color) {
            case RED:
                value = 1;
                break;
            case BLUE:
                value = 2;
                break;
            case BLACK:
            case WHITE:
                if((int) (Math.random() * 3) > 1) {
                    value = 0;
                    break;
                }
                value = 1;
                break;
            default: value = -1;
        }
        System.out.println(value);
    }
}

enum Color {
    RED, BLUE, GREEN, WHITE, BLACK,
}

下面改為新的switch expression語法,其加入了arrow case case L ->L代表label)。case可設多個lable且不需要break停止下落;case的結果能直接分派到變數中,整個switch expression即是一個expression。case可用block包起並以yield回傳結果。

Switch expression要求每個case都必須覆蓋到否則無法編譯,稱為exhaustiveness。例如若把default拿掉則因為少了case GREEN會編譯錯誤。

Main.java

package com.abc.demo;

public class Main {

    public static void main(String[] arges) {
        var color = Color.WHITE;

        var value = switch (color) {
            case RED -> 1;
            case BLUE -> 2;
            case BLACK, WHITE -> {
                if((int) (Math.random() * 3) > 1) {
                    yield 0;
                }
                yield 1;
            }
            default -> -1;
        };
        
        System.out.println(value);
    }

}

enum Color {
    RED, BLUE, GREEN, WHITE, BLACK,
}

github


沒有留言:

AdSense