摘要:中引入了新的語(yǔ)法用于局部變量類型推斷,很多開發(fā)者有所疑惑,希望這篇文章能幫到你。對(duì)經(jīng)常使用泛型的開發(fā)者來(lái)說(shuō),可能早就對(duì)上面的類型推斷寫法習(xí)以為常。簡(jiǎn)單說(shuō)它是受限于它們存在的方法或循環(huán)聲明的范圍。
簡(jiǎn)評(píng):Java var != JavaScript var。
Java 10 中引入了新的語(yǔ)法用于局部變量類型推斷,很多開發(fā)者有所疑惑,希望這篇文章能幫到你。
什么是類型推斷其實(shí)在 Java 中類型推斷早就存在了,看下下面的例子:
public void doSomething() { final Listnames = new ArrayList (); // ^^^^^^------- Redundant ... }
在這個(gè)例子中給?ArrayList?定義持有的類型就沒(méi)必要了,因?yàn)?List
public void doSomething() { final Listnames = new ArrayList<>(); // ^^------ Inferred! ... }
這兩種寫法是完全合法的,而且最終會(huì)形成一樣的字節(jié)碼。對(duì)經(jīng)常使用泛型的開發(fā)者來(lái)說(shuō),可能早就對(duì)上面的類型推斷寫法習(xí)以為常。
那什么是局部變量類型推斷?即能推斷出方法中局部變量的類型,這是 Java 10 中新增的特性,對(duì)應(yīng)關(guān)鍵詞?var,看個(gè)例子 :
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)聲明的變量,同時(shí)也可以用于循環(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)嗎?一個(gè)字:不。
簡(jiǎn)單說(shuō)它是受限于它們存在的方法(或循環(huán)聲明)的范圍。這意味著除了聲明它們的方法的開發(fā)之外,人們不編寫依賴于這些類型的代碼。
還有大家會(huì)有一個(gè)疑惑,很多語(yǔ)言也是不需要定義類型的,完全由編譯器搞定,以 JavaScript 舉例:
var x = "Todd"
簡(jiǎn)單吧,x 是?String?類型的,但是在 JS 中能重新定義類型,比如:
var x = "Todd" x = 42 // Now it"s an int?!
像這種 Java 以后是不是也不用考慮變量類型了?錯(cuò),和JS 不一樣,Java 中的 var 只能在局部變量使用外,同時(shí)是不能重復(fù)賦值的,就拿上面的例子,會(huì)導(dǎo)致編譯錯(cuò)誤:
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 也不會(huì)因此變成動(dòng)態(tài)類型分配語(yǔ)言,這僅僅是對(duì)局部變量多了一種定義方式。
總結(jié)下Var 是我們的好朋友;
Java var != JavaScript var;
Var 解決了你顯示聲明變量的一些麻煩,但他們依然存在;
Var 聲明的變量和顯示聲明的變量是一模一樣的;
Var 類型變量不會(huì)影響到你其他的代碼;
多了解一下總不會(huì)錯(cuò)吧!
原文鏈接: Java Developers: var Is Your Friend ? Todd Ginsberg?todd.ginsberg.com
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72288.html
摘要:因?yàn)榕笥咽褂玫氖牵瑸榱朔奖?,我也就下載了正版的軟件,讓他幫我配置上環(huán)境?,F(xiàn)在不同了,如果從長(zhǎng)遠(yuǎn)的角度考慮,還是不使用盜版軟件。不過(guò)現(xiàn)在情況不同了,英語(yǔ)水平提高,軟件使用方法概念也比較清楚,而且不愿意使用盜版軟件了。 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注 問(wèn)題概述 最近跟朋友做的java項(xiàng)目,使用到了mysql和MyEclipse。先談?wù)勎覍?duì)軟件的理解,等項(xiàng)目都結(jié)束時(shí),再開一個(gè)文章,談...
摘要:兩日前,發(fā)了一篇吐槽,莫名的火了一把。關(guān)于的第一個(gè),其實(shí)就是聲明一個(gè)常量,不允許變更。另外對(duì)象迭代這里出自,阮一峰大神寫的入門指南,對(duì)象篇。 兩日前,發(fā)了一篇吐槽,莫名的火了一把。經(jīng)過(guò)大家的建議與鼓勵(lì),于是修改了簡(jiǎn)歷,開始了重新投遞,2天后接到第一份面試邀請(qǐng)。 此文為個(gè)人面試經(jīng)歷,QA問(wèn)答過(guò)程與總結(jié),不透露面試公司及面試人員,內(nèi)容真實(shí),如果有面試過(guò)我的大佬看到博客,歡迎指出問(wèn)題。 循序...
這兩天和朋友談到軟件測(cè)試的發(fā)展:這一行的變化確實(shí)蠻大,從開始最基礎(chǔ)的功能測(cè)試,到現(xiàn)在自動(dòng)化、性能、安全乃至于以后可能出現(xiàn)的大數(shù)據(jù)測(cè)試、AI測(cè)試崗位需求逐漸增多。我也在軟件測(cè)試這行摸爬滾打了十年了,正好有朋友問(wèn)我:如何快速成為互聯(lián)網(wǎng)時(shí)代優(yōu)秀的測(cè)試工程師呢?趁著最近終于有了些閑余時(shí)間,遂總結(jié)了下自動(dòng)化測(cè)試的成長(zhǎng)線路圖和職業(yè)必備技能,希望可以幫助各位少走彎路、破繭成蝶、邁向成功。 下面我來(lái)分享下自動(dòng)化測(cè)...
摘要:沒(méi)錯(cuò),我想這正是我們大多數(shù)人學(xué)習(xí)新東西不斷探索向前時(shí)使用最多的工具了。開發(fā)工具推薦是公司旗下一款開發(fā)工具。簡(jiǎn)稱是在年月日開發(fā)者大會(huì)上正式宣布一個(gè)運(yùn)行于和之上的,針對(duì)于編寫現(xiàn)代和云應(yīng)用的跨平臺(tái)源代碼編輯器,可在桌面上運(yùn)行,并且可用于,和。 ...
閱讀 2111·2023-04-25 19:15
閱讀 2294·2021-11-23 09:51
閱讀 1296·2021-11-17 09:33
閱讀 2209·2021-08-26 14:15
閱讀 2514·2019-08-30 15:54
閱讀 1608·2019-08-30 15:54
閱讀 2195·2019-08-30 12:50
閱讀 1163·2019-08-29 17:08