依照 6 個月的發佈週期,甲骨文預計在 3 月 17 日時推出 Java 14,這個版本有三個主要的更新,第一個便是在 Java 12 新增的預覽功能 Switch 表達式,在 Java 14 中成熟成為正式功能,第二個則是新增的語言功能,為 instanceof 增加模式配對,第三個則是 JVM 的功能,提供有用的 NullPointerExceptions 信息。
![Java 14 即將發佈,正式加入新的 Switch 表達式](http://p2.ttnews.xyz/loading.gif)
由於 Java 舊的 Switch 表達式有幾個問題,因此官方在 Java 12 的時候,加入新的 Switch 表達式語法預覽版,要讓 Switch 更好用。Switch 表達式語法包含 case 以及 break 陳述式,條件配對由上往下執行,一旦進到特定 case 中,break 陳述式會確保下一個 case 區塊不會被執行,但是當開發者忘記寫 break,執行流程會繼續往下走,直到碰到下一個 break,這個現象被稱為穿透(Fall-through)。
而在新的 Switch 表達式中,使用了新的語法來避免穿透發生的可能性,因此能夠降低可能產生臭蟲的機率。新的 Switch 格式使用 Lambda 風格的語法,該語法由標籤和回傳值代碼間的箭頭組成,但官方強調,這個並非真正的 Lambda 表達式,只是類似而已。
![Java 14 即將發佈,正式加入新的 Switch 表達式](http://p2.ttnews.xyz/loading.gif)
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 加入新的 JVM 功能,讓開發者可以獲取更多可用於診斷錯誤的信息,在 Java 14 之前, NullPointerException 信息含糊不清,無法明確的讓開發者知道程序問題所在。而現在,信息至少會包含問題發生的位置和原因兩類信息。這項功能不止可用於方法調用,還可用於其他可能導致 NullPointerException 的地方,包括欄位存取、陣列存取和賦值。
閱讀更多 AI智慧 的文章