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,
}
沒有留言:
張貼留言