歡迎光臨
每天分享高質量文章

Java 10將於本月釋出,它會改變你寫程式碼的方式

來自:Hollis(微訊號:hollischuang)

連結:hollischuang.com/archives/2064

2017年8月,JCP執行委員會提出將Java的釋出頻率改為每六個月一次,隨後,Oracle發言人Donald Smith在他的部落格中確認了這一訊息。該決定將在Java 9正式釋出之後開始實行,也就是說,Java的下一個釋出日期是2018年3月。

新的釋出週期嚴格遵循時間點,將在每年的3月份和9月份釋出。與現在的釋出週期不同,新的釋出計劃不會為了等待某個主要特性完成而延期。如果一個特性還沒有完成,它就不會被合併到釋出用的程式碼倉庫裡。如果錯過了一個版本,就要等待下一次釋出。在此之前,Java 8也因為安全問題延期了8個月左右,Java 9因為模組化系統(Jigsaw)問題一再延期,比預期晚了18個月釋出。

也就是說,作為一個Java開發,你使用的程式語言,每半年都會有一個新的版本出來。這無疑是一件好事兒。

隨著新技術的不斷退出,對於開發者的挑戰也就越來越大。像我在我的文章中多次提到過的觀點:作為一個開發人員,最大的挑戰就是如何保證自己瞭解新的技術。好在你現在關註了Hollis,我會和你一起學習這些新技術。

按照上面提到的Java釋出進度,Java 10將於本月釋出。因為Java 10的時間線較短,範圍也相對較小,所以Java 10的變更將透過JEP進行跟蹤。

有望被包含在Java 10中的特性是那些已經處於Targeted或Proposed狀態的JEP,它們包括:

286:本地變數型別推斷 

296:統一JDK倉庫 

304:垃圾回收器介面 

307:G1的並行Full GC 

310:應用程式類資料共享 

312:ThreadLocal握手機制

本文,主要來介紹一個特性:本地變數型別推斷。因為他將改變你寫程式碼的方式。

什麼是本地變數推斷

他其實是一個新的語法糖,在我的GitChat《深入分析Java語法糖》中我詳細介紹過目前Java中的所有語法糖及其背後的原理。Java現在在逐漸往多糖語言轉變,從Java 7開始便有意的開始加入語法糖。同樣,為了方便和簡化開發,Java 10將提供一個新的語法糖——本地變數型別推斷。

型別推斷,並不是Java語言獨有的特性,許多流行的程式語言,比如C++, C#以及Go,在定義過程中,都提供一種區域性變數型別推斷的功能(例如C++提供了auto 關鍵字,C#提供var關鍵字)。

在當前版本的Java中,我們想定義定義區域性變數時。我們需要在賦值的左側提供顯式型別,併在賦值的右邊提供實現型別,如下麵的片段所示:

MyObject value = new MyObject();

List list = new ArrayList();

在Java 10中,你可以這樣定義物件:

var value = new MyObject();

var list = new ArrayList();

正如你所看到的,本地變數型別推斷將引入“var”關鍵字,而不需要顯式的規範變數的型別。

很簡單,如果你想使用這個特性,就在你定義區域性變數的時候引入var關鍵字就可以了。至於他背後的實現原理,我會單獨開一篇文章來解語法糖。

背後的故事

在JEP 286誕生之前,Oracle曾做過一個調查,主要是想看看社群對於這一特性的反應。

第一個調查是:你認為Java引入區域性變數的型別推斷咋樣?

第二個調查是:你希望使用哪個關鍵字來定義變數?

從上面的兩個調查,我們可以知道,這一特性是受到廣大開發者歡迎的,因為他確實方便了很多。

他將如何影響你的程式碼

當一個新特性來臨的時候,我們首先要問自己一個問題:這將如何影響我的程式碼? 下麵我們來看下這一特性可以使用在哪些場景中,以及在哪些場景中不能使用。

適用範圍:

初始化區域性變數 

一定是初始化的時候,只是定義是不可以的。如var foo;不可以,但是var foo = “Foo”;可以。

增強for迴圈的索引

如for (var nr : numbers)

傳統for迴圈的區域性變數定義

如 for (var i = 0; i < numbers.size(); i++)

不適用範圍:

  • 方法的引數

  • 建構式的引數

  • 方法的傳回值型別

  • 物件的成員變數

  • 只是定義定義而不初始化

總結

在Java 10之後你在宣告區域性變數型別的時候可以使用var來告知編譯器進行型別推斷。這僅僅發生在變數初始化的階段,就像 var s = “”;這樣。 此外,也可以是用在普通for迴圈和增強for迴圈中。

除了區域性變數之外,另外在屬性和方法傳回值型別中,不能使用var。 這樣做是為了避免引起一些無法預知的錯誤。

儘管引入var變數會使程式碼可讀性變得更糟,但此次的新特性為開發者提供了一種在編寫複雜運算式的時候尋求了一個新的契機。

-END-


●本文編號636,以後想閱讀這篇文章直接輸入636即可

●輸入m獲取到文章目錄

推薦↓↓↓

Python程式設計

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂