Java 14 已經釋出有一周時間了,我準備來開個箱,和小夥伴們一起來看看新特性裡面都有哪些好玩的。我們程式員應該抱着嘗鮮、獵奇的心态,否則就容易固步自封,技術停滞不前。先來看看 Java 14 都有哪些新特性吧!
紅色線劃出來的是我比較感興趣的,其餘的對我沒什麼太大的吸引力,就暫且略過。01、下載下傳 JDK 14
要想開箱,得先下載下傳 JDK 14,不然拿什麼開箱呢,對吧?有 2 處地方可供下載下傳,Oracle 上可以下載下傳商用版, jdk.java.net 上可以下載下傳開源版。我們就選擇後者吧。
我目前用的是 Windows 作業系統,是以就選擇 Windows 版的 zip 包進行下載下傳,完成後記得解壓。
02、更新 IntelliJ IDEA
需要把 IDEA 更新到搶先體驗版 2020.1 EAP,否則無法支援 Java 14 的新特性。
社群版的下載下傳位址如下所示:
[https://www.jetbrains.com/idea/nextversion/#section=windows](https://www.jetbrains.com/idea/nextversion/#section=windows)
安裝的時候可以把之前的版本解除安裝,也可以選擇保留。完成後,我們來建立一個 Java 14 的項目。
01、instanceof
按照新特性的順序,我們就先從 instanceof 說起吧。舊式的 instanceof 的用法如下所示:
public class OldInstanceOf {
public static void main(String[] args) {
Object str = "Java 14,真香";
if (str instanceof String) {
String s = (String)str;
System.out.println(s.length());
}
}
}
需要先使用 instanceof 在 if 條件中判斷 str 的類型是否為 String(第一步),再在 if 語句中将 str 強轉為字元串類型(第二步),并且要重新聲明一個變量用于強轉後的指派(第三步)。
三個步驟也不算多,但總覺得應該還有更好的文法,這不,Java 14 就想到了這一層。
public class NewInstanceOf {
public static void main(String[] args) {
Object str = "Java 14,真香";
if (str instanceof String s) {
System.out.println(s.length());
}
}
}
可以直接在 if 條件判斷類型的時候添加一個變量,就不需要再強轉和聲明新的變量了。是不是特别簡潔?但模式比對的 instanceof 在 Java 14 中是預覽版的,預設是不啟用的,是以這段代碼會有一個奇怪的編譯錯誤(Java 14 中不支援模式比對的 instanceof)。
那怎麼解決這個問題呢?需要在項目配置中手動設定一下語言的版本。
設定完成後,編譯錯誤就随風飄走了。程式輸出的結果如下所示:
10
不錯不錯,真香。想知道 Java 編譯器在背後幫我們做了什麼嗎?看一下反編譯後的位元組碼就明白了。
public class NewInstanceOf {
public NewInstanceOf() {
}
public static void main(String[] args) {
Object str = "Java 14,真香";
String s;
if (str instanceof String && (s = (String)str) == (String)str) {
System.out.println(s.length());
}
}
}
在 if 條件判斷前,先聲明了變量 s,然後在 if 條件中進行了強轉 s = (String)str),并且判斷了 s 和 str 是否相等。确實是一個解放開放者生産力的好特性,強烈希望這個特性在下個版本中轉正。