重溫Java泛型,帶你更深入地理解它,更好的使用它!
阿新 • • 發佈:2020-11-12
## **1. 引言**
jdk5.0中引入了Java泛型,目的是減少錯誤,並在型別上新增額外的抽象層。
本文將簡要介紹Java中的泛型、泛型背後的目標以及如何使用泛型來提高程式碼的質量。
## **2. 為什麼要用泛型?**
設想一個場景,我們希望用Java建立一個列表來儲存*Integer*;程式碼可能會寫成這樣:
```java
List list = new LinkedList();
list.add(new Integer(1));
Integer i = list.iterator().next();
```
令人驚訝的是,編譯器會提示最後一行。它不知道返回的資料型別是什麼。因此,編譯器提示需要進行顯式轉換:
```java
Integer i = (Integer) list.iterator.next();
```
沒有任何約定可以保證列表的返回型別是*整數。*定義的列表可以包含任何物件。我們只知道我們是通過檢查上下文來檢索列表的。在檢視型別時,它只能保證它是一個*Object*,因此需要顯式轉換來確保型別是安全的。
這種轉換可能會令人感到聒噪,我們明明知道這個列表中的資料型別是*整數*。轉換的話,也把我們的程式碼搞得亂七八糟。如果程式設計師在顯式轉換中出錯,則可能會導致丟擲與 **型別相關的執行時錯誤** 。
如果程式設計師能夠表達他們使用特定型別的意圖,並且編譯器能夠確保這種型別的正確性,那麼這將更加容易。
這就是泛型背後的核心思想。
我們將前面程式碼段的第一行修改為:
```java
List