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哈哈~. 借鑑借鑑~