Java?泛型的上界和下界通配符示例詳解
介紹
Java中的泛型是一種強(qiáng)類型的機(jī)制,允許我們在編譯時(shí)檢查類型的安全性,以避免在運(yùn)行時(shí)出現(xiàn)類型轉(zhuǎn)換異常。泛型的上界和下界用于限制泛型類型參數(shù)的范圍,本文將會詳細(xì)介紹它們的概念和用法。
上界
泛型的上界指定了類型參數(shù)必須是某個(gè)類的子類或者實(shí)現(xiàn)了某個(gè)接口。它的語法形式為 T extends B
,其中T是泛型類型參數(shù),B是上界類型。例如,下面的代碼展示了一個(gè)泛型類 Box
,它的類型參數(shù)T必須是 Number
或其子類:
public class Box<T extends Number> { private T value; public Box(T value) { this.value = value; } public T getValue() { return value; } }
在上面的代碼中,我們使用了 extends
關(guān)鍵字來指定泛型類型參數(shù)的上界類型,這意味著泛型類型參數(shù)必須是 Number
或其子類。這樣,我們就可以使用 Box
類來存儲 Integer
、Double
、Float
等類型的值,因?yàn)樗鼈兌际?Number
的子類。另外,通過使用泛型的上界,我們可以確保 Box
類的實(shí)例中只存儲 Number
類型的值,避免了類型轉(zhuǎn)換異常的風(fēng)險(xiǎn)。
在使用泛型的時(shí)候,如果我們傳入一個(gè)類型不符合上界限制的參數(shù),則會在編譯時(shí)發(fā)生錯(cuò)誤,例如:
Box<String> box = new Box<>("Hello World"); // 編譯錯(cuò)誤:String 不是 Number 的子類
下界
泛型的下界指定了類型參數(shù)必須是某個(gè)類的超類或者是某個(gè)接口的實(shí)現(xiàn)類。它的語法形式為 T super B
,其中T是泛型類型參數(shù),B是下界類型。下面是一個(gè)示例,展示了一個(gè)泛型類 Box
,它的類型參數(shù)T必須是 Object
或其超類:
public class Box<T super Object> { private T value; public Box(T value) { this.value = value; } public T getValue() { return value; } }
在上面的代碼中,我們使用了 super
關(guān)鍵字來指定泛型類型參數(shù)的下界類型,這意味著泛型類型參數(shù)必須是 Object
或其超類。這樣,我們就可以使用 Box
類來存儲 Object
、String
、Integer
、Double
等類型的值,因?yàn)樗鼈兌际?Object
的子類。另外,通過使用泛型的下界,我們可以確保 Box
類的實(shí)例中存儲的值都是 Object
類型,避免了類型轉(zhuǎn)換異常的風(fēng)險(xiǎn)。
在使用泛型的時(shí)候,如果我們傳入一個(gè)類型不符合下界限制的參數(shù),則會在編譯時(shí)發(fā)生錯(cuò)誤,例如:
Box<Integer> box = new Box<>(123); // 編譯錯(cuò)誤:Integer 不是 Object 的超類
上下界通配符
有時(shí)候,我們需要在泛型中同時(shí)使用上界和下界的限制,此時(shí)可以使用通配符 ?
來表示未知類型。例如,下面的代碼展示了一個(gè)泛型方法 copy
,它可以將一個(gè)數(shù)組的元素復(fù)制到另一個(gè)數(shù)組中:
public static <T> void copy(List<? extends T> src, List<? super T> dest) { for (T t : src) { dest.add(t); } }
在上面的代碼中,我們使用了通配符 ?
來表示未知類型,它可以同時(shí)滿足 src
參數(shù)是 T
類型或其子類,dest
參數(shù)是 T
類型或其超類的限制條件。這樣,我們就可以將任意類型的元素復(fù)制到另一個(gè)列表中了。通過使用上下界通配符,我們可以更加靈活地定義泛型方法,同時(shí)保證類型安全。
總結(jié)
Java中的泛型是一種強(qiáng)類型的機(jī)制,它能夠在編譯時(shí)檢查類型的安全性。泛型的上界和下界用于限制類型參數(shù)的范圍,它們可以讓我們更精確地控制類型的使用。在使用泛型時(shí),我們需要根據(jù)實(shí)際需求選擇合適的上下界限制,以保證程序的正確性和可靠性。
除了上下界限制外,還可以使用通配符 ?
來表示未知類型,從而更加靈活地定義泛型類和方法。因此,學(xué)習(xí)和掌握泛型機(jī)制對于Java開發(fā)人員來說是非常重要的。
以上就是Java 泛型的上界和下界的詳細(xì)內(nèi)容,更多關(guān)于Java 泛型的上界和下界的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
idea中導(dǎo)入別人的springboot項(xiàng)目的方法(圖文)
這篇文章主要介紹了idea中導(dǎo)入別人的springboot項(xiàng)目的方法(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java實(shí)現(xiàn)隊(duì)列的三種方法集合
這篇文章主要介紹了Java實(shí)現(xiàn)隊(duì)列的三種方法集合,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Spring Boot解決項(xiàng)目啟動(dòng)時(shí)初始化資源的方法
這篇文章主要給大家介紹了關(guān)于Spring Boot如何解決項(xiàng)目啟動(dòng)時(shí)初始化資源的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05