Java泛型是什麼意思
Java泛型(Generics)是Java SE 5.0引入的一項功能,它允許在類、接口和方法的聲明中使用類型變量(Type Variables)。泛型的主要目的是支持類似於C++模板那樣的泛型編程,同時解決Java中原始類型(如List
)的限制和安全問題。
在Java泛型中,類型變量以大寫字母T
(代表"Type")開始,但也可以使用任何其他字母或字元串。泛型類和方法的聲明通常包含一個或多個類型變量,這些變量可以在實例化時被具體的類型所替換。
例如,Java集合框架中的List
接口可以用來創建一個可以存儲任何類型的項目的列表。在Java 5之前,List
接口的實例化需要使用Object
類型,這會導致在添加或檢索列表項時進行類型轉換,從而可能引發ClassCastException。
// 傳統的List使用
List list = new ArrayList();
list.add("Hello");
Object obj = list.get(0);
String str = (String) obj;
Java泛型允許在聲明列表時指定一個具體的類型,這樣就可以在編碼時知道列表中項目的類型,並且編譯器可以幫助檢測類型錯誤。
// 使用泛型的List
List<String> stringList = new ArrayList<>();
stringList.add("Hello");
String str = stringList.get(0);
在這個例子中,<String>
告訴編譯器stringList
中的項目的類型是String
,因此編譯器可以確保get(0)
方法返回的對象是String
類型,而不需要進行類型轉換。
Java泛型的另一個重要特性是它們是擦除的(erasure),這意味著編譯器會將泛型代碼轉換為不包含任何泛型信息的標準Java代碼。在運行時,泛型類的實例與普通類的實例沒有區別,它們都只是普通的Java類。因此,泛型不能用來創建新的類型,它們只是一種編程技巧,用來幫助編碼時檢測類型錯誤和提高代碼的可讀性。