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

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

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

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


Advertisement

更多 iThome相關內容