JDK10中的局部變量類型推斷var
Java是一種強(qiáng)類型, 許多流行的編程語言都已經(jīng)支持局部變量類型推斷,如js,Python,C++等
JDK10 可以使用var作為局部變量類型推斷標(biāo)識符
Local-Variable Type Inference(局部變量量類型推斷),顧名思義只能用做為局部變量
注意
僅適用于局部變量量,如 增強(qiáng)for循環(huán)的索引,傳統(tǒng)for循環(huán)局部變量不能使用于方法形參、構(gòu)造函數(shù)形參、方法返回類型或任何其他類型的變量量聲明標(biāo)識符var不是關(guān)鍵字,而是一個保留類型名稱,而且不支持類或接口叫var,也不符合命名規(guī)范
用jshell試驗(yàn)或者IDEA
//根據(jù)推斷為 字符串串類型
var strVar = "springboot";
System.out.println(strVar instanceof String);
//根據(jù)10L 推斷l(xiāng)ong 類型
var longVar = 10 L;
//根據(jù) true推斷 boolean 類型
var flag = true;
//var flag = Boolean.valueOf("true");
//System.out.println(flag instanceof Boolean);
// 推斷 ArrayList<String>
var listVar = new ArrayList < String > ();
System.out.println(listVar instanceof ArrayList);
// 推斷 Stream<String>
var streamVar = Stream.of("aa", "bb", "cc");
System.out.println(streamVar instanceof Stream);
if (flag) {
System.out.println("這個是 flag 變量量,值為true");
}
for (var i = 0; i < 10; i++) {
System.out.println(i);
}
try (var input = new FileInputStream("validation.txt")) {}
附錄:下面看下局部變量類型推斷
很多人抱怨Java是一種強(qiáng)類型,需要引入大量的樣板代碼。甚至在這些情況下,給定好變量名,通常很清楚發(fā)生了什么,明顯類型聲明往往被認(rèn)為是不必要的。許多流行的編程語言都已經(jīng)支持某種形式的局部變量類型推斷:如C++ (auto), C# (var), Scala (var/val), Go (declaration with :=)等。
JDK10 可以使用var作為局部變量類型推斷標(biāo)識符,此符號僅適用于局部變量,增強(qiáng)for循環(huán)的索引,以及傳統(tǒng)for循環(huán)的本地變量;它不能使用于方法形式參數(shù),構(gòu)造函數(shù)形式參數(shù),方法返回類型,字段,catch形式參數(shù)或任何其他類型的變量聲明。
標(biāo)識符var不是關(guān)鍵字;相反,它是一個保留的類型名稱。這意味著var用作變量,方法名或則包名稱的代碼不會受到影響;但var不能作為類或則接口的名字(但這樣命名是比較罕見的,因?yàn)樗`反了通常的命名約定,類和接口首字母應(yīng)該大寫)。
參考一下示例:
var str = "ABC"; //根據(jù)推斷為 字符串類型 var l = 10L;//根據(jù)10L 推斷l(xiāng)ong 類型 var flag = true;//根據(jù) true推斷 boolean 類型 var flag1 = 1;//這里會推斷boolean類型。0表示false 非0表示true var list = new ArrayList<String>(); // 推斷 ArrayList<String> var stream = list.stream(); // 推斷 Stream<String>
反編譯class文件:
String str = "ABC"; long l = 10L; boolean flag = true; int flag1 = true; ArrayList<String> list = new ArrayList(); Stream<String> stream = list.stream();
從上面示例可以看出,當(dāng)我們是用復(fù)雜的方法時,不需要特意去指定他的具體類型返回,可以使用var推斷出正確的數(shù)據(jù)類型,這在編碼中,可以大幅減少我們對方法返回值的探究。
到此這篇關(guān)于JDK10中的局部變量類型推斷var的文章就介紹到這了,更多相關(guān)JDK10局部變量類型推斷var內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)十進(jìn)制與二進(jìn)制互轉(zhuǎn)的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)十進(jìn)制與二進(jìn)制的互轉(zhuǎn),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下2022-11-11
輸出java進(jìn)程的jstack信息示例分享 通過線程堆棧信息分析java線程
通過ps到j(luò)ava進(jìn)程號將進(jìn)程的jstack信息輸出。jstack信息是java進(jìn)程的線程堆棧信息,通過該信息可以分析java的線程阻塞等問題。2014-01-01
SpringBoot對不同Bean注解的區(qū)別和使用場景說明
這篇文章主要介紹了SpringBoot對不同Bean注解的區(qū)別和使用場景說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
SpringBoot整合MongoDB完整實(shí)例代碼
本文主要介紹了SpringBoot整合MongoDB完整實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
SpringBoot通過整合Dubbo解決@Reference注解問題
這篇文章主要介紹了SpringBoot通過整合Dubbo解決@Reference注解問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
SpringBoot中如何進(jìn)行統(tǒng)一異常處理
大家好,本篇文章主要講的是SpringBoot中如何進(jìn)行統(tǒng)一異常處理,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02

