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 只能用於在方法內部、for 迴圈和 try-with-resources 語句中宣告區域性變數。

使用“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”

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 變數的型別仍然在編譯時進行靜態檢查。

更新於:2023-07-19

854 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告