03.06 Java 14 即將發佈,正式加入新的 Switch 表達式

依照 6 個月的發佈週期,甲骨文預計在 3 月 17 日時推出 Java 14,這個版本有三個主要的更新,第一個便是在 Java 12 新增的預覽功能 Switch 表達式,在 Java 14 中成熟成為正式功能,第二個則是新增的語言功能,為 instanceof 增加模式配對,第三個則是 JVM 的功能,提供有用的 NullPointerExceptions 信息。

Java 14 即將發佈,正式加入新的 Switch 表達式

由於 Java 舊的 Switch 表達式有幾個問題,因此官方在 Java 12 的時候,加入新的 Switch 表達式語法預覽版,要讓 Switch 更好用。Switch 表達式語法包含 case 以及 break 陳述式,條件配對由上往下執行,一旦進到特定 case 中,break 陳述式會確保下一個 case 區塊不會被執行,但是當開發者忘記寫 break,執行流程會繼續往下走,直到碰到下一個 break,這個現象被稱為穿透(Fall-through)。

而在新的 Switch 表達式中,使用了新的語法來避免穿透發生的可能性,因此能夠降低可能產生臭蟲的機率。新的 Switch 格式使用 Lambda 風格的語法,該語法由標籤和回傳值代碼間的箭頭組成,但官方強調,這個並非真正的 Lambda 表達式,只是類似而已。

Java 14 即將發佈,正式加入新的 Switch 表達式

Java 12 之前,Switch 表達式中每一個 case 只能使用一個標籤,因此儘管不同標籤的處理邏輯相同,仍需要分開寫成兩個 case 區塊,或是故意利用穿透現象來達成目的,但是故意使用穿透可能會造成誤解,因為在部分情況會難以判斷缺少 break 陳述式是故意的還是無意的。而在新的 Switch 表達式中,現在可以在 case 使用多個標籤處理這樣的情況。

官方表示,新的 Switch 表達式也更加詳盡安全,當開發者在 Switch 中使用 enum 時,編譯器會檢查 case 是否列舉所有 enum 中的值,當創建的 switch 沒有涵蓋所有的值,則會出現編譯器錯誤,這個錯誤可以提醒開發者處理遺漏的情況。

另外,Switch 在 Java 12 之前只是一個陳述式,而現在則可做為一個表達式使用。官方提到,陳述式的本質是動作,而表達式的本質則是請求產生一個值,表達式越基本容易理解,也會使得代碼更容易維護。而現在開發者可以把 switch 撰寫成簡潔的表達式,以更好的表明代碼的意圖。

Java 14 為 instanceof 加入模式配對,這個功能可減少有條件 instanceof 檢查,進行強制轉換的需要。模式配對是讓開發者能夠測試值的樣子,並在符合特定規則的時候取出信息,在測試參數以確定其類型時,會經過轉換,並宣告區域變數,以便後續利用特定類型進行處理。

這個新的語言功能,則是讓開發者從物件中有條件的取出元件變得簡單,使語法更加簡單可讀,官方表示,這個預覽功能為廣泛的模式配對開了一個門,模式配對的中心思想,就是要提供一個功能,可以簡單地根據條件,從物件中取出元件,而 instanceof 運算子就是這樣的功能。

Java 14 即將發佈,正式加入新的 Switch 表達式

Java 14 即將發佈,正式加入新的 Switch 表達式

Java 14 加入新的 JVM 功能,讓開發者可以獲取更多可用於診斷錯誤的信息,在 Java 14 之前, NullPointerException 信息含糊不清,無法明確的讓開發者知道程序問題所在。而現在,信息至少會包含問題發生的位置和原因兩類信息。這項功能不止可用於方法調用,還可用於其他可能導致 NullPointerException 的地方,包括欄位存取、陣列存取和賦值。


分享到:


相關文章: