編程技術(shù)分享:Java10局部變量類型推斷

編程技術(shù)分享:Java10局部變量類型推斷

長沙一度軟件培訓(xùn)      2022-04-28 05:00:02     2

編程技術(shù)分享:Java10局部變量類型推斷,在所有Java10中出現(xiàn)的JEP規(guī)范中,最有趣,并獲得了最多討論的,非JEP286-局部變量類型推斷(Local-Variable Type Inference)。什

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

在所有Java10中出現(xiàn)的JEP規(guī)范中,最有趣,并獲得了最多討論的,非JEP286-局部變量類型推斷(Local-Variable Type Inference)。

什么是局部變量類型推斷

在Java7中的菱形操作符允許我們這樣寫代碼:

List<String> data=new ArrayList<>();

在Java8中,你可以這樣寫:

List<String> data=new ArrayList();

右操作數(shù)能夠根據(jù)左操作數(shù)推斷出類型。Java9中,在匿名內(nèi)部類中,也同樣適用(修復(fù)了該問題)。

Java10更進了一步

List<Map> data = new ArrayList();

這個代碼在Java10中,可以這樣寫:

var data = new ArrayList<Map>();

注意,這種寫法,我們在右操作數(shù)中必須確定泛型的具體參數(shù)類型,否則,Java會判定data為一個ArrayList<Object>。

局部變量類型推斷允許開發(fā)者在申明局部變量的時候不用顯示申明變量的類型(在方法中的,初始代碼塊,for循環(huán),if-else這樣的代碼塊中的變量),這些類型會由JDK來推斷。

我們能在什么地方使用?

下面我用一段代碼來演示,什么時候我們能使用var聲明變量:

public?class?LegalLocalVarInferenceDemo{?//在static這樣的靜態(tài)/初始代碼塊中?static?{?var?anotherName?=?"Sanaulla";?System.out.println("Hello,?"?+?anotherName);?}?public?static?void?main(String[]?args){?//可以在方法局部變量中?var?name?=?"Mohamed?Sanualla";?System.out.println("Hello?"?+?name);?var?data?=?new?ArrayList<Map>();?data.add(Map.of("key1",?"value1",?"key2",?"value2"));?data.add(Map.of("key11",?"value11",?"key22",?"value22"));?System.out.println(data);?System.out.println("As?iteration?variable?in?enhanced?for-loop");?for?(?var?object?:?data){?System.out.println(String.format("%s?of?type?%s",?object,?object.getClass().getName()));?}?System.out.println("As?looping?index?in?for-loop");?for?(?var?i?=?0?;?i?<?data.size();?i++?){?var?object?=?data.get(i);?System.out.println(String.format("%s?of?type?%s",?object,?object.getClass().getName()));?}?System.out.println("As?a?return?value?from?another?method");?var?anInteger?=?someAnotherMethod();?System.out.println("someAnotherMethod?returned?"?+?anInteger);?}?//在方法的返回值中?public?static?Integer?someAnotherMethod(){?System.out.println("someAnotherMethod?called");?var?returnObj?=?12;?return?returnObj;?}}

我們不能在什么地方使用?

我來創(chuàng)建另一個代碼案例,來演示var不能在什么地方使用:

public?class?IllegalLocalVarInferenceDemo{?//不能在申明類的成員變量的時候?//var?someProperty;?//不允許作為類的構(gòu)造方法參數(shù)的時候?//?public?LocalVarInferenceDemo(var?param1){?//?}?public?static?void?main(String[]?args){?//不允許作為catch的異常類型?//?try{?//?//some?operations?//?}catch(var?ex){?//?}?}?//不允許作為方法的參數(shù)類型聲明?//public?static?void?someMethod(var?param1,?var?param2){?//?System.out.println("Some?method?called");?//}?//不允許作為方法返回值類型聲明?//?public?static?var?someAnotherMethod2(){?//?System.out.println("someAnotherMethod?called");?//?var?returnObj?=?12;?//?return?returnObj;?//?}}

以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機構(gòu)的小編針對“編程技術(shù)分享:Java10局部變量類型推斷”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹防上當。