隨著新的 Java 發布生命周期的到來,新版本預計將于 2020 年 3 月發布,本文將對其中的 5 個主要特性作些概述。
Java 13剛剛發布給開發人員使用不久,最新版本的JDK于2019年9月發布。但是很少有公司現在改用了Java 13,因爲這個版本看起來無論如何都不會從甲骨文公司獲得長期支持(LTS)。更不要說現在Java 14又已經出現了。
隨著新的Java發布生命周期的到來,新的Java版本預計將于2020年3月發布。時間已經所剩不多了,這就是爲什麽甲骨文公司的Java首席架構師Mark Reinhold剛剛提出應該將JDK增強提案(JEP)中的5個主要特性包含進Java 14中的原因。
因此,在這篇文章裏我將對這5個主要特性作些概述。這些特性應該作爲Java 14的一部分,以便它們可以從2020年3月起提供給開發人員使用。
一、instanceof 模式匹配
作爲預覽模式提供的這個新特性旨在通過向用戶提供instanceof操作符的模式匹配來改進Java。
模式匹配在其他語言中已經出現,它使得以一種更安全和更簡潔的方式來表達程序邏輯成爲可能。
instanceof操作符的模式匹配將有助于從對象中有條件地提取組件。
在大多數Java程序中,都有下面這種類型的代碼:
if (obj instanceof Integer) { int intValue = (Integer) obj; // … use intValue …}
在這段代碼中,我們通過instanceof運算符來檢查obj變量是否是Integer的實例。如果條件爲真的話,我們不能將obj直接作爲一個整數變量使用,因爲必須首先對它進行轉換。
上面的代碼不簡潔,也不是很清晰。此外,在程序中重複這種類型的構造會增加出錯的風險。
而作爲預覽狀態在Java 14中引入的instanceof操作符的模式匹配將允許對上述代碼作如下簡化:
if (x instanceof Integer i) {
// … use i as an Integer directly …
}
在下面更複雜的例子中,我們可以更加理解Java 14中可以做到什麽:
二、文本塊再次作爲預覽特性保留
文本塊(Text Block)在Java 13中作爲預覽特性引入,在Java 14中再次作爲預覽特性保留下來。
鑒于在Java 13發布之後從各大Java社區收集上來的反饋,對文本塊添加了兩個新的轉義序列。
轉義序列符“\”顯式地消除了插入新行字符的需要。以下面這個使用位于小字符串之間的連接運算符“+”來拆分較大字符串的例子爲例:
由于字符文本和傳統字符串文本不允許嵌入換行符,因此轉義序列符“\”僅適用于文本塊。
另一方面,新的轉義序列符“\s”可以被轉換爲一個簡單的空白。這樣可以防止空白字符被清除掉。
基于這個轉義序列符,我們可以構建一個字符串,確保每一行的長度相同:
爲了在Java 14中引入這種新類型,需要在Java.lang.Class對象中添加如下兩個新方法:
RecordComponent[] getRecordComponents()boolean isRecord()
這兩個方法的目的是更新Java Reflection API,以便將記錄類型納入其中。
四、打包工具終于來了
在Java 13發布前的最後一刻被從外圍移除的打包工具jpackage終于可以在Java 14中使用了。但是要注意,它只在Incubator版本中提供。
這個打包工具應該可以讓開發人員創建自主的Java應用程序,它以JavaFXjavapackager這個打包工具爲基礎。它的主要特點有如下三個:
- 支持本地打包格式,爲用戶提供自然的安裝體驗;
- 打包時可以指定啓動參數;
- 通過命令行或使用ToolProvider API的程序來啓動。
五、一個組合垃圾收集器被棄用
Java 14中令人期待的最新創新顯然不是針對所有Java開發人員的,實際上,它打算棄用ParallelScavenge + SerialOld垃圾收集器組合。
支持這一改變的JEP 366清楚地表明,他們的目的不是要刪除掉這個組合,而是要棄用它。
棄用這種算法組合的原因是:它很少被使用,同時需要大量的維護工作。
結束語
預定于2020年3月發布的Java 14,對Java開發人員的日常工作影響相對較小。最前沿的新特性是instanceof的模式匹配,這是大多數開發人員都渴望嘗試的新特性。
但是,在生産環境中使用此特性之前,你必須要有耐心,因爲它們在Java 14中僅僅作爲預覽特性出現。
好消息是,instanceof的模式匹配代表了在Java 15、16或17中進行更廣泛的模式匹配的第一步。
所有這些改變都讓開發人員感到非常高興,因爲他們所有人將在程序的可讀性和個人的開發效率方面獲得顯著的收益。
原文:https://medium.com/better-programming/top-5-new-features-expected-in-java-14-82c0d85b295e


