Java12新特性 -- switch表達式

傳統switch表達式的弊端:java

  • 匹配是自上而下的,若是忘記寫break, 後面的case語句不論匹配與否都會執行;
  • 全部的case語句共用一個塊範圍,在不一樣的case語句定義的變量名不能重複;
  • 不能在一個case裏寫多個執行結果一致的條件;
  • 整個switch不能做爲表達式返回值;

java 12 switch新特性:code

  • 使用 Java 12 中 Switch 表達式的寫法,省去了 break 語句,避免了因少寫 break 而出錯。
  • 同時將多個 case 合併到一行,顯得簡潔、清晰也更加優雅的表達邏輯分支,其具體寫法就是將以前的 case 語句表成了:case L ->,即若是條件匹配 case L,則執行標籤右側的代碼 ,同時標籤右側的代碼段只能是表達式、代碼塊或 throw 語句。
  • 爲了保持兼容性,case 條件語句中依然能夠使用字符 : ,這時 fall-through 規則依然有效的,即不能省略原有
    的 break 語句,可是同一個 Switch 結構裏不能混用 -> 和 : ,不然會有編譯錯誤。而且簡化後的 Switch 代碼塊中定義的局部變量,其做用域就限制在代碼塊中,而不是蔓延到整個 Switch 結構,也不用根據不一樣的判斷條件來給變量賦值。
public class SwitchTest1 {
    public static void main(String[] args) {
            Week day = Week.FRIDAY;
            switch (day) {
            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);
            default -> throw new IllegalStateException("What day is today?" + day);
            }
        }
}


public class SwitchTest2 {
    public static void main(String[] args) {
            Week day = Week.FRIDAY;
            int numLetters = switch (day) {
                case MONDAY, FRIDAY, SUNDAY -> 6;
                case TUESDAY -> 7;
                case THURSDAY, SATURDAY -> 8;
                case WEDNESDAY -> 9;
                default -> throw new IllegalStateException("What day is today?" + day);
            };
        }
}
相關文章
相關標籤/搜索