Java?泛型的上界和下界通配符示例詳解
介紹
Java中的泛型是一種強類型的機制,允許我們在編譯時檢查類型的安全性,以避免在運行時出現類型轉換異常。泛型的上界和下界用于限制泛型類型參數的范圍,本文將會詳細介紹它們的概念和用法。
上界
泛型的上界指定了類型參數必須是某個類的子類或者實現了某個接口。它的語法形式為 T extends B,其中T是泛型類型參數,B是上界類型。例如,下面的代碼展示了一個泛型類 Box,它的類型參數T必須是 Number 或其子類:
public class Box<T extends Number> {
private T value;
public Box(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
在上面的代碼中,我們使用了 extends 關鍵字來指定泛型類型參數的上界類型,這意味著泛型類型參數必須是 Number 或其子類。這樣,我們就可以使用 Box 類來存儲 Integer、Double、Float 等類型的值,因為它們都是 Number 的子類。另外,通過使用泛型的上界,我們可以確保 Box 類的實例中只存儲 Number 類型的值,避免了類型轉換異常的風險。
在使用泛型的時候,如果我們傳入一個類型不符合上界限制的參數,則會在編譯時發(fā)生錯誤,例如:
Box<String> box = new Box<>("Hello World"); // 編譯錯誤:String 不是 Number 的子類
下界
泛型的下界指定了類型參數必須是某個類的超類或者是某個接口的實現類。它的語法形式為 T super B,其中T是泛型類型參數,B是下界類型。下面是一個示例,展示了一個泛型類 Box,它的類型參數T必須是 Object 或其超類:
public class Box<T super Object> {
private T value;
public Box(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
在上面的代碼中,我們使用了 super 關鍵字來指定泛型類型參數的下界類型,這意味著泛型類型參數必須是 Object 或其超類。這樣,我們就可以使用 Box 類來存儲 Object、String、Integer、Double 等類型的值,因為它們都是 Object 的子類。另外,通過使用泛型的下界,我們可以確保 Box 類的實例中存儲的值都是 Object 類型,避免了類型轉換異常的風險。
在使用泛型的時候,如果我們傳入一個類型不符合下界限制的參數,則會在編譯時發(fā)生錯誤,例如:
Box<Integer> box = new Box<>(123); // 編譯錯誤:Integer 不是 Object 的超類
上下界通配符
有時候,我們需要在泛型中同時使用上界和下界的限制,此時可以使用通配符 ? 來表示未知類型。例如,下面的代碼展示了一個泛型方法 copy,它可以將一個數組的元素復制到另一個數組中:
public static <T> void copy(List<? extends T> src, List<? super T> dest) {
for (T t : src) {
dest.add(t);
}
}
在上面的代碼中,我們使用了通配符 ? 來表示未知類型,它可以同時滿足 src 參數是 T 類型或其子類,dest 參數是 T 類型或其超類的限制條件。這樣,我們就可以將任意類型的元素復制到另一個列表中了。通過使用上下界通配符,我們可以更加靈活地定義泛型方法,同時保證類型安全。
總結
Java中的泛型是一種強類型的機制,它能夠在編譯時檢查類型的安全性。泛型的上界和下界用于限制類型參數的范圍,它們可以讓我們更精確地控制類型的使用。在使用泛型時,我們需要根據實際需求選擇合適的上下界限制,以保證程序的正確性和可靠性。
除了上下界限制外,還可以使用通配符 ? 來表示未知類型,從而更加靈活地定義泛型類和方法。因此,學習和掌握泛型機制對于Java開發(fā)人員來說是非常重要的。
以上就是Java 泛型的上界和下界的詳細內容,更多關于Java 泛型的上界和下界的資料請關注腳本之家其它相關文章!
相關文章
Java的外部類為什么不能使用private和protected進行修飾的講解
今天小編就為大家分享一篇關于Java的外部類為什么不能使用private和protected進行修飾的講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04
手寫redis@Cacheable注解?支持過期時間設置方式
這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時間設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

