1. 程式人生 > >Java10新特性

Java10新特性

Applicabilityand impact

Scanningthe OpenJDK code base for local variable declarations, we found that 13% cannotbe written using var, sincethere is no initializer, the initializer has the null type, or (rarely) theinitializer requires a target type. Among the remaining local variabledeclarations:

94%have an initializer with the exact type present in the source code (63% ofcases with parameterized types)

5%have an initializer with some sharper denotable type (29% of cases withparameterized types)

1%have an initializer with a type that mentions a capture variable (7% of caseswith parameterized types)

<1%have an initializer with an anonymous class type or intersection type (same forcases with parameterized types)

嗯,開頭就英文,頭疼?不管看不看得懂,請君往下看!!!

重要的事情說三遍,往下看,往下看,往下看!

上面的英文都是從Java官網複製下來的

先說說它的適用範圍(上面英文總結):

適用:1.區域性變數初始化

2.    for迴圈內部索引變數

3.    傳統的for迴圈宣告變數

程式碼實現:



不適用:1.方法引數

2.建構函式引數

3.方法返回型別

4.類成員變數型別

程式碼實現:




程式碼看完,是不是有點像JS裡面的感覺?

其他語言對區域性變數型別推斷的支援(C++——auto,C#——var,Scala——var/val)

看完這麼多,區域性型別變數到底是什麼:英文又來了~~啦啦嘻嘻

 

有道翻譯君(展現實力):|>

區域性變數型別推斷

區域性變數型別推斷減少了使用範圍僅包含單個Java模組的變數所需的一些開銷。作為一種設計原則,Java要求顯式地鍵入所有變數——也就是說,程式設計師必須非常清楚地宣告變數將包含的資料型別。這確保使用變數的每個模組或類以相同的方式解釋其內容。這個被稱為“型別安全”的原則最小化了執行時錯誤。但是,在單個模組內部可以嚴格使用更多的變數,比如迴圈迭代器,或者在複雜計算中包含中間值的變數。顯式地輸入這些變數不僅耗時,而且可能會導致程式設計師的人為錯誤。使用本地變數型別推斷,程式設計師只需使用特殊語法啟動變數,然後Java編譯器從上下文推斷型別。更少的程式碼加上更少的錯誤等於更快樂的開發人員。

優缺點:

優:減少程式碼的冗長。

缺:資料型別不明確

說了這麼多,應該明白了吧。

其實我說的沒幾句 ~O(∩_∩)O哈哈~. 借鑑借鑑~偷笑偷笑