網頁

2019/5/13

Java 10 使用var宣告本地變數

Java 10的新特性,使用var宣告本地變數(local variable),又稱做「本地變數型別推定」(Local-Variable Type Inference)。


在Java 10以前宣告變數並賦值的寫法如下:

String s = new String("hello");
System.out.println(s); // hello

宣告變數時我們必須指定變數的型態,例如上面的String s


Java 10可使用var來替代原本必須宣告變數型態的寫法。

var s = new String("hello");
System.out.println(s); // hello

在上面我們使用了Java 10的var s替代了原本的String s


使用var宣告本地變數帶來的最大優點就是減少冗長累贅的程式碼,提高程式碼的閱讀性。尤其是以往碰到某些類別名稱很長的時候,var讓程式碼減短不少。

例如用一個很長的類別名稱SmallBusinessLongTermLoanDrawdownIntersetRate(微型企業長期貸款動用利息)來比較一下

SmallBusinessLongTermLoanDrawdownIntersetRate sbLtlnDdIntst = new SmallBusinessLongTermLoanDrawdownIntersetRate();
var sbLtlnDdIntst = new SmallBusinessLongTermLoanDrawdownIntersetRate(); // 長度立刻減少一半

(這裡故意取一個超長名稱方便說明,實務上通常以縮寫來簡短名稱的長度,例如SBLTLnDdIntst,但縮寫過頭的命名又無法看出這代表的資訊。)


var是透過右側建構式的型別來推斷(infer)型別,所以var宣告變數時在表示式右側必須為類別的建構式或有具體回傳型態的方法。

var s0 = new String("hello"); // OK
var s1 = "hello"              // OK
var s2 = getSomeString();     // OK

var s3 = null; // 錯誤 Cannot infer type for local variable initialized to 'null'
var s4;        // 錯誤 Cannot use 'var' on variable without initializer

另外Java的var不同於JavaScript的varvar並非讓Java從靜態型別語言變成如JavaScript的動態型別語言,而僅是讓語法更簡潔而以。例如JavaScript可以這樣寫:

var v = 123;
v = "abc";
console.log(v); // abc

但Java的var無法隨便變換值的類型,因為var仍代表一個具體的型別。

var v = 123; // var一開始賦值為整數,所以推斷為int
v = "abc"; // 錯誤 Type mismatch: cannot convert from String to int


沒有留言:

張貼留言