Java 10區域性變數型別var使用禁忌
毫無疑問,Java在語法上是冗長的!其他程式語言中只要一行就能實現的功能在Java中需要幾行,這是由於Java是一種靜態型別語言,出於這個原因,初學者發現Java有點令人生畏。但是有一個工具可以讓我們更容易
#Python 3
foo = "bar"
print(foo)
// JavaScript
var foo = "bar";
console.log(foo);
// JavaScript
var foo = "bar";
console.log(foo);
// Java 的字數比較多
String foo = "NOT bar";
System.out.println(foo);
Java構造似乎與其他構造沒有太大的不同。但是,要成功在非REPL環境中執行,如果要引入一個類,需要完整的類的檔名稱(不包括.java這個副檔名),簡而言之,需要編寫不必要的長程式碼,才能在Java中執行非常簡單的操作。
JEP 286救援
Java的9釋出後不久,Java 10又釋出了,java 9帶來的Java程式員的模組系統,JShell,Javadoc搜尋功能,多版本jar和其他一些有趣的功能,讓程式設計師的生活更輕鬆。由於JDK增強建議(JEP)286,Java 10引入了var 。
JEP 286唯一目標是:區域性變數型別推斷,var讓編譯器為你推斷省略了型別宣告的變數型別,型別推斷不是新的 - 如果您在Java 7或更高版本中使用過泛型,則會使用菱形(<>)來省略型別。其他一些流行的靜態型別語言已經為區域性變數型別推斷提供了某種支援,比如Go,C#,Scala甚至C ++,Java遲到了。儘管如此,Java開發人員對這種有趣的包含感到興奮。
應該注意var並不是Java中的關鍵字。它只是一個具有特殊含義的識別符號,作為區域性變數宣告的型別。如果您還沒有注意到,var僅適用於本地上下文,一旦進入main方法(以及任何其他本地上下文),您就可以將var用於區域性變數宣告。
用法
使用var時,編譯器應該能夠立即推斷出型別,(否則將失敗。)此外,var變數不能保持值null,並且它不能用作類的名稱。
// Okay! Type inferred
var foo = "bar";
// Not allowed! Type cannot be inferred
var foo1;
//variable initializer is null
var oh = null;
//as of release 10, 'var' is a restricted local variable type and cannot be used for type declarations
class var {}
第二個表示式失敗,編譯器顯示無法推斷區域性變數foo1的型別(在沒有初始化程式的情況下不能對變數使用'var')。
另外,var不允許宣告多個變數。
//Not allowed
//'var' is not allowed in a compound declaration
var foo = "bar", line = 1;
同樣,var不能用於宣告陣列。傷心!
//Not Allowed
//'var' is not allowed as an element type of an array
var lot[] = new int[10];
Var lot[] = {1, 2, 4};
// This is PERMITTED
var lot = new ArrayList<Integer>();
var b = List.of(1, 2, 3, 4);
另外,var也不允許進行自引用。
// Not allowed
//cannot use 'var' on self-referencing variable
var self = (self = "me");
//一旦變數被宣告,分配不同的型別會失敗
// Okay
var foo = 33;
foo = 45;
// Not Allowed
// Error: incompatible types: possible lossy conversion from double to int
foo = 33.0;
但是,var非常適合迴圈,因為它減少了必須編寫的程式碼行。在以下迴圈中檢視它的實際操作。
for(var i = 0; i < 10; i++)
System.out.println(i);
System.out.println("Fire!");
// print 0 to 9, then Fire!
另請注意,引數不允許使用var,很容易犯這個錯誤。
結論
通過了解在Java 10中使用var的注意事項,你應該能夠減少編寫的程式碼量,並可能節省一些時間,雖然var看起來像是一個小功能新增,但Java開發人員肯定會經常使用它的,切換到Java 10後,你一定要充分利用它。