JDK 14釋出版本正式支援switch表示式。具體包括:在switch語句中使用箭頭標號語法;case 條件,多個可以寫在一行,用逗號分開;可以省略 break 關鍵字;switch可以作為表示式直接返回一個值。具體標準參見https://openjdk.java.net/jeps/361。
例如,下面定義的方法rangeOf ( )中,switch語句中使用了箭頭標籤(Arrow Labels),case 條件中使用多個字面常量,並且省略了break語句:
static void rangeOf(int k) { switch (k) { case 1,2,3 -> System.out.println("Ranking one"); case 4,5,6,7,8,9 -> System.out.println("Ranking two"); default -> System.out.println("Not Ranked"); }}
連續使用如下的方法方法呼叫:
howMany(1);howMany(19);howMany(8);
會得到如下的輸出結果:
Ranking oneNot RankedRanking two
switch語句擴充套件成為switch表示式的基本語法為:
<目標型別> result = switch (<引數>) { case Label1 -> <表示式1>; case Label2 -> <表示式2>; …… default -> <表示式n>;};
如果<目標型別>確定,整個switch表示式的型別就是目標型別;如果<目標型別>不確定,那麼 switch 表示式型別就是各 case 分支的表示式計算出來的獨立型別。
大多數情況下 case 標號箭頭("case Label ->")後面是單個表示式,對於後面由多條語句構成的語句塊,可以在最後使用 yield 語句來返回 switch 表示式值。例如:
int j = switch (s) { case "BJTU" -> 1; case "SSE" -> 2; default -> { System.out.println("Neither BJTU nor SSE, hmmm..."); yield 0; }};
yield語句也可以用於傳統的case 標號("case Label :")下,返回一個值並結束switch表示式。例如:
int result = switch (s) { case "BJTU": yield 1; case "SSE": yield 2; default: System.out.println("Neither BJTU nor SSE, hmmm..."); yield 0;};
最新評論