Java 10釋出

weixin_33766168發表於2018-03-25
\

看新聞很累?看技術新聞更累?試試下載InfoQ手機客戶端,每天上下班路上聽新聞,有趣還有料!

\
\\

Oracle釋出了新版本的Java,即Java 10。這個版本距離Java 9的釋出剛剛過去了六個月,和上個版本一樣,它也是特性發布版本,其生命週期只有六個月。

\\

隨著Java 10的釋出,Java 9隨即被廢止,以後不會再有Java 9的免費支援版本釋出。從3月20日開始,Oracle免費支援的Java版本是Java 8和Java 10。下一個長期支援的版本將會是Java 11,預計會在2018年九月份釋出。

\\

最終的釋出版本與RC1候選版本幾乎沒有什麼差別,從InfoQ 2017年11月報導釋出內容之後,Java 10並沒有新增什麼重要的特性。

\\

關於該版本語言級別的變更,可以通過版本的完整文件和釋出說明獲取。

\\

對於開發人員來說,一個重要的變更就是新增了var。這是對Java型別推斷功能的增強,該特性已被證明比它剛剛出現的時候更為重要。在最簡單的場景中,var允許我們按照如下的方式編寫程式碼:

\\
var foo = new ArrayList\u0026lt;String\u0026gt;();
\\

它將推斷從值的型別轉移到了變數中。

\\

在Java 10中,該特性的實現是通過將var作為保留型別名而不是作為關鍵字來實現的。這意味著,使用var作為變數名、方法或包名並不會受到影響。

\\

除了簡單的場景,它實際上還允許我們使用以前所不允許的程式設計結構。例如,javac一直允許使用功能非常有限的型別推斷形式:

\\
public class Test {\    public static void main(String[] args) {\        (new Object() {\            public void bar() {\                System.out.println(\"bar!\");\            }\        }).bar();\    }\}
\\

Java 7出現之前,它的功能邊界已經被Java社群所知曉。

\\

這種形式的型別推斷所面臨的問題在於它沒有辦法實際應用,“具有bar方法的物件”存在於編譯器中,但是該型別無法通過變數型別的方式來表述,它並不是可表示的型別

\\

隨著Java 10的釋出,變數的型別不再需要明確指定,var能夠避免明確表示型別,從而允許我們保留靜態的型別資訊。這意味著我們可以修改樣例程式碼,編寫成如下的樣子:

\\
var o = new Object() {\    public void bar() {\        System.out.println(\"bar!\");\    }\};\\o.bar();
\\

var作為“魔力型別”來使用,允許程式設計師以某種方式保留每次型別推斷的型別資訊,這不禁讓人聯想到Java泛型的約束。

\\

關於var如何實現非表示性型別的更高階用法,可以參考該文章。儘管該特性無法滿足每個批判者對Java型別系統的質疑,但是它的確代表了一種堅定(可能也是謹慎的)的進步。

\\

檢視英文原文:Java 10 Released

相關文章