Java 中的 var 關鍵字
Java 是一種靜態型別的語言,以其冗長性和嚴格的型別檢查而聞名。但是,隨著 Java 10 的釋出,引入了一項名為區域性變數型別推斷的新功能,將 var 關鍵字引入到語言中,並改變了 Java 開發人員的編碼方式。本文將探討 var 關鍵字,說明其用例並討論其對 Java 編碼實踐的影響。
理解 Java 中的“var”
在 Java 中,傳統上,我們需要顯式宣告我們建立的每個變數的型別。隨著 Java 10 中引入 var,這種情況發生了變化。var 關鍵字允許您宣告區域性變數而不指定其型別。Java 編譯器將根據其初始化程式推斷變數的型別。
var name = "Java"; var version = 10; var list = new ArrayList<String>();
在上面的示例中,name 被推斷為 String 型別,version 為 int 型別,list 為 ArrayList 型別
使用“var”編寫更簡潔的程式碼
使用 var 會導致程式碼更簡潔,尤其是在處理複雜的泛型型別時。例如,考慮以下不使用 var 的程式碼行:
Map<String, List<Map.Entry<String, Integer>>> map = new HashMap<>();
可以使用 var 顯著簡化此程式碼:
var map = new HashMap<String, List<Map.Entry<String, Integer>>>();
map 變數的型別由 Java 編譯器根據其初始化程式推斷得出,從而減少了冗餘並提高了程式碼的可讀性。
“var”和集合
在使用集合時,var 透過減少冗長性(尤其是在使用泛型時)而變得非常有用。假設我們有一個字串列表:
var names = List.of("Alice", "Bob", "Charlie");
names 變數的型別被推斷為 List
迴圈中的“var”
var 關鍵字也可用於增強型 for 迴圈,這在處理複雜的泛型型別時非常有用:
var map = new HashMap<String, Integer>(); // populate map for (var entry : map.entrySet()) { // process entry }
這裡,entry 被推斷為 Map.Entry<String, Integer> 型別。
“var”的侷限性
雖然 var 是 Java 中一個強大的補充,但必須瞭解其侷限性:
var 只能用於宣告區域性變數。它不能用於欄位宣告、方法引數或返回型別
var 需要初始化程式。您不能在不初始化的情況下宣告 var 變數,因為編譯器無法推斷變數的型別。
var 不能與 null 初始化程式一起使用,因為無法推斷型別。
var 不能用於宣告陣列型別的變數,但可以用於宣告對陣列的引用。
var arr = new int[10]; // correct var[] arr = new int[10]; // incorrect
結論
var 關鍵字是 Java 語言中一個受歡迎的補充,它提高了程式碼的可讀性並減少了冗長性。它使程式碼更簡潔,尤其是在處理複雜的泛型型別時。儘管如此,必須記住,var 並沒有使 Java 成為動態型別的語言。var 變數的型別仍然在編譯時進行靜態檢查。