1. 程式人生 > 程式設計 >JDK10中的區域性變數型別推斷var

JDK10中的區域性變數型別推斷var

Java是一種強型別,許多流行的程式語言都已經支援區域性變數型別推斷,如js,Python,C++等

JDK10 可以使用var作為區域性變數型別推斷識別符號

Local-Variable Type Inference(區域性變數量型別推斷),顧名思義只能用做為區域性變數

注意

僅適用於區域性變數量,如 增強for迴圈的索引,傳統for迴圈區域性變數不能使用於方法形參、建構函式形參、方法返回型別或任何其他型別的變數量宣告識別符號var不是關鍵字,而是一個保留型別名稱,而且不支援類或介面叫var,也不符合命名規範

用jshell試驗或者IDEA

//根據推斷為 字串串型別
var strVar = "springboot";
System.out.println(strVar instanceof String);
 
//根據10L 推斷long 型別
var longVar = 10 L;
 
//根據 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是一種強型別,需要引入大量的樣板程式碼。甚至在這些情況下,給定好變數名,通常很清楚發生了什麼,明顯型別宣告往往被認為是不必要的。許多流行的程式語言都已經支援某種形式的區域性變數型別推斷:如C++ (auto),C# (var),Scala (var/val),Go (declaration with :=)等。

JDK10 可以使用var作為區域性變數型別推斷識別符號,此符號僅適用於區域性變數,增強for迴圈的索引,以及傳統for迴圈的本地變數;它不能使用於方法形式引數,建構函式形式引數,方法返回型別,欄位,catch形式引數或任何其他型別的變數宣告。

識別符號var不是關鍵字;相反,它是一個保留的型別名稱。這意味著var用作變數,方法名或則包名稱的程式碼不會受到影響;但var不能作為類或則介面的名字(但這樣命名是比較罕見的,因為他違反了通常的命名約定,類和介面首字母應該大寫)。

參考一下示例:

var str = "ABC"; //根據推斷為 字串型別
var l = 10L;//根據10L 推斷long 型別
var flag = true;//根據 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();

從上面示例可以看出,當我們是用複雜的方法時,不需要特意去指定他的具體型別返回,可以使用var推斷出正確的資料型別,這在編碼中,可以大幅減少我們對方法返回值的探究。

到此這篇關於JDK10中的區域性變數型別推斷var的文章就介紹到這了,更多相關JDK10區域性變數型別推斷var內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!