摘要:在此基礎上又向前邁進了一步局部變量類型推斷允許開發人員跳過局部變量的類型聲明局部變量是指在方法定義,初始化塊,循環和其它的如代碼塊,會推斷該局部變量的類型。
前言
之前面試的時候問了我是否了解JDK10的變化,一時回答不出來,所以只回答了JDK8中的函數式編程和流編程。今天看到這篇講JAVA10的文章,順便了解一下。
正文JAVA10的所有新特性請參考這里。在所有的JEP中,JEP-286在社區中引發了熱烈的討論。因此今天將介紹此特性。
什么是局部變量類型推斷在JAVA8中,我們可以將下面這樣使用的菱形運算符:
List
轉化為:
Listdata = new ArrayList<>();
RHS上的類型通過LHS上的類型來推斷。
Java 10在此基礎上又向前邁進了一步:
var data = new ArrayList<>();
局部變量類型推斷允許開發人員跳過局部變量的類型聲明(局部變量是指在方法定義,初始化塊,for循環和其它的如if-else代碼塊),JDK會推斷該局部變量的類型。
在哪里使用?下面我寫一個樣例代碼來展示使用局部變量推斷var的不同的方法:
public class LegalLocalVarInferenceDemo{ //在靜態或是實例化的代碼塊中 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<>(); data.add(Map.of("key1", "value1", "key2", "value2")); data.add(Map.of("key11", "value11", "key22", "value22")); data.add("hello"); System.out.println(data); System.out.println("********** As iteration variable in enhanced for-loop ***************"); //for循環中 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循環中 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); } //As a return value in a method public static Integer someAnotherMethod(){ System.out.println("someAnotherMethod called"); var returnObj = 12; return returnObj; } }何時不能使用?
public class IllegalLocalVarInferenceDemo{ //不準聲明實例變量 //var someProperty; //不準作為構造器的參數 // public LocalVarInferenceDemo(var param1){ // } public static void main(String[] args){ //不準被catch塊捕獲 // try{ // //some operations // }catch(var ex){ // } } //不準作為方法聲明的參數 //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; // } }補充官網上的例子
Main.java:81: error: cannot infer type for local variable x var x; ^ (cannot use "val" on variable without initializer) Main.java:82: error: cannot infer type for local variable f var f = () -> { }; ^ (lambda expression needs an explicit target-type) Main.java:83: error: cannot infer type for local variable g var g = null; ^ (variable initializer is "null") Main.java:84: error: cannot infer type for local variable c var c = l(); ^ (inferred type is non denotable) Main.java:195: error: cannot infer type for local variable m var m = this::l; ^ (method reference needs an explicit target-type) Main.java:199: error: cannot infer type for local variable k var k = { 1 , 2 }; ^ (array initializer needs an explicit target-type)參考資料
JRE-286
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注我的微信公眾號!將會不定期的發放福利哦~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68716.html
摘要:目標發布目前有兩個主要功能針對局部變量類型推斷這將刪除大部分對象實例化所需的冗長的包含手動類型信息整合源樹的庫即不同的庫將被合并成一個單一的存儲庫。特別是,承諾為局部變量實例化引入類型推斷機制,并將現有的存儲庫合并到一個存儲庫中。 JDK 10 何時發布? JDK 10 是 Java 10 標準版的部分實現,將于 2018 年 3 月 20 日發布,改進的關鍵點包括一個本地類型推斷、一...
摘要:在月日正式發布,同時宣布將新版本的發布周期調整為每半年一次。目前,新版本的開發也已正式進入軌道。提議在中引入局部變量的類型推斷,該在年提出,曾經報道過該的概況和相關的開發者調查結果。它會減少開發人員在聲明局部變量時,沒有必要的變量類型聲明。 Java 9在9月21日正式發布,同時Oracle宣布將Java新版本的發布周期調整為每半年一次。目前,Java新版本的開發也已正式進入軌道。就已...
摘要:的問題在于,版本號中編碼了它和它對之前版本的兼容性信息。但是在六個月節奏的情況下,這些信息都是未知的,在發布前任何事情都可能發生,由此規范下的版本號也會是未知的。程序會對文件的完整性做一個保護,因此修改既可能丟失。 本文是對底部參考資料的整理得到的,由于本人技術水平和英語水平都不是很高,有些詞如有翻譯錯誤或句子的理解錯誤還請指出。 JEP 286 局部變量推斷: var 傳統的 J...
摘要:的新特性說了這么多,看都會有哪些特性來改變我們寫代碼的方式呢局部變量類型推斷局部變量類型推斷可以說是中最值得注意的特性,這是語言開發人員為了簡化應用程序的編寫而采取的又一步,如下圖所示。 showImg(https://segmentfault.com/img/remote/1460000015356980); Java 9才發布幾個月,很多玩意都沒整明白,現在Java 10又快要來了...
摘要:實際上并未引入太多新特性,不過有一個新特性最引人注目等了這么久終于支持類型推斷了,那么今天就來看一看的類型推斷,和其他語言相比有哪些異同吧。本次更新也支持了類型推斷,對于這種重量級語言來說還是一件值得高興的事。 0x01 Java 10簡介 自從有了校內的下載網站,很少上Oracle官網下載JDK了,結果前兩天聽鐘神說Java 10都出來了2333。干IT這行還真是要與時俱進啊,那就...
閱讀 704·2021-11-22 13:54
閱讀 3065·2021-09-26 10:16
閱讀 3490·2021-09-08 09:35
閱讀 1576·2019-08-30 15:55
閱讀 3429·2019-08-30 15:54
閱讀 2075·2019-08-30 10:57
閱讀 497·2019-08-29 16:25
閱讀 877·2019-08-29 16:15