摘要:中引入了新的語法用于局部變量類型推斷,很多開發(fā)者有所疑惑,希望這篇文章能幫到你。對經(jīng)常使用泛型的開發(fā)者來說,可能早就對上面的類型推斷寫法習(xí)以為常。簡單說它是受限于它們存在的方法或循環(huán)聲明的范圍。
簡評:Java var != JavaScript var。
Java 10 中引入了新的語法用于局部變量類型推斷,很多開發(fā)者有所疑惑,希望這篇文章能幫到你。
什么是類型推斷其實(shí)在 Java 中類型推斷早就存在了,看下下面的例子:
public void doSomething() { final Listnames = new ArrayList (); // ^^^^^^------- Redundant ... }
在這個例子中給?ArrayList?定義持有的類型就沒必要了,因?yàn)?List
public void doSomething() { final Listnames = new ArrayList<>(); // ^^------ Inferred! ... }
這兩種寫法是完全合法的,而且最終會形成一樣的字節(jié)碼。對經(jīng)常使用泛型的開發(fā)者來說,可能早就對上面的類型推斷寫法習(xí)以為常。
那什么是局部變量類型推斷?即能推斷出方法中局部變量的類型,這是 Java 10 中新增的特性,對應(yīng)關(guān)鍵詞?var,看個例子 :
public void doSomething() { final ??? name = "Todd"; }
name 是什么類型,很明顯是?String,而 Java 10 就可以讓編譯器幫我們判斷其類型,我們只要寫成下面的形式:
public void doSomething() { final var name = "Todd"; // name is inferred as a String! }
var 的使用不局限于函數(shù)內(nèi)聲明的變量,同時也可以用于循環(huán)的索引:
final Listnames = new ArrayList<>(); public void doSomething() { for(var name: names) { System.out.println("Name: " + name); } for(var i = 0; i < names.size(); i++) { System.out.println("Name: " + names.get(i)); } }
我必須使用 var 嗎?不是的,老方法一樣完美支持。
這樣的做法危險(xiǎn)嗎?一個字:不。
簡單說它是受限于它們存在的方法(或循環(huán)聲明)的范圍。這意味著除了聲明它們的方法的開發(fā)之外,人們不編寫依賴于這些類型的代碼。
還有大家會有一個疑惑,很多語言也是不需要定義類型的,完全由編譯器搞定,以 JavaScript 舉例:
var x = "Todd"
簡單吧,x 是?String?類型的,但是在 JS 中能重新定義類型,比如:
var x = "Todd" x = 42 // Now it"s an int?!
像這種 Java 以后是不是也不用考慮變量類型了?錯,和JS 不一樣,Java 中的 var 只能在局部變量使用外,同時是不能重復(fù)賦值的,就拿上面的例子,會導(dǎo)致編譯錯誤:
public void doSomething() { var x = "Todd"; x = 42; // Compiler fails on this line: // Error: java: incompatible types: int cannot be converted to java.lang.String }
所以 var 一點(diǎn)都不危險(xiǎn),Java 也不會因此變成動態(tài)類型分配語言,這僅僅是對局部變量多了一種定義方式。
總結(jié)下Var 是我們的好朋友;
Java var != JavaScript var;
Var 解決了你顯示聲明變量的一些麻煩,但他們依然存在;
Var 聲明的變量和顯示聲明的變量是一模一樣的;
Var 類型變量不會影響到你其他的代碼;
多了解一下總不會錯吧!
原文鏈接: Java Developers: var Is Your Friend ? Todd Ginsberg?todd.ginsberg.com
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72288.html
摘要:兩日前,發(fā)了一篇吐槽,莫名的火了一把。關(guān)于的第一個,其實(shí)就是聲明一個常量,不允許變更。另外對象迭代這里出自,阮一峰大神寫的入門指南,對象篇。 兩日前,發(fā)了一篇吐槽,莫名的火了一把。經(jīng)過大家的建議與鼓勵,于是修改了簡歷,開始了重新投遞,2天后接到第一份面試邀請。 此文為個人面試經(jīng)歷,QA問答過程與總結(jié),不透露面試公司及面試人員,內(nèi)容真實(shí),如果有面試過我的大佬看到博客,歡迎指出問題。 循序...
這兩天和朋友談到軟件測試的發(fā)展:這一行的變化確實(shí)蠻大,從開始最基礎(chǔ)的功能測試,到現(xiàn)在自動化、性能、安全乃至于以后可能出現(xiàn)的大數(shù)據(jù)測試、AI測試崗位需求逐漸增多。我也在軟件測試這行摸爬滾打了十年了,正好有朋友問我:如何快速成為互聯(lián)網(wǎng)時代優(yōu)秀的測試工程師呢?趁著最近終于有了些閑余時間,遂總結(jié)了下自動化測試的成長線路圖和職業(yè)必備技能,希望可以幫助各位少走彎路、破繭成蝶、邁向成功。 下面我來分享下自動化測...
摘要:沒錯,我想這正是我們大多數(shù)人學(xué)習(xí)新東西不斷探索向前時使用最多的工具了。開發(fā)工具推薦是公司旗下一款開發(fā)工具。簡稱是在年月日開發(fā)者大會上正式宣布一個運(yùn)行于和之上的,針對于編寫現(xiàn)代和云應(yīng)用的跨平臺源代碼編輯器,可在桌面上運(yùn)行,并且可用于,和。 ...
閱讀 2085·2023-04-25 19:15
閱讀 2258·2021-11-23 09:51
閱讀 1267·2021-11-17 09:33
閱讀 2169·2021-08-26 14:15
閱讀 2483·2019-08-30 15:54
閱讀 1585·2019-08-30 15:54
閱讀 2172·2019-08-30 12:50
閱讀 1135·2019-08-29 17:08