最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?泛型的上界和下界通配符示例詳解

 更新時間:2023年04月04日 13:31:01   作者:GeekTR  
這篇文章主要為大家通過示例介紹了Java?泛型的上界和下界通配符,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

介紹

Java中的泛型是一種強類型的機(jī)制,允許我們在編譯時檢查類型的安全性,以避免在運行時出現(xiàn)類型轉(zhuǎn)換異常。泛型的上界和下界用于限制泛型類型參數(shù)的范圍,本文將會詳細(xì)介紹它們的概念和用法。

上界

泛型的上界指定了類型參數(shù)必須是某個類的子類或者實現(xiàn)了某個接口。它的語法形式為 T extends B,其中T是泛型類型參數(shù),B是上界類型。例如,下面的代碼展示了一個泛型類 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 等類型的值,因為它們都是 Number 的子類。另外,通過使用泛型的上界,我們可以確保 Box 類的實例中只存儲 Number 類型的值,避免了類型轉(zhuǎn)換異常的風(fēng)險。

在使用泛型的時候,如果我們傳入一個類型不符合上界限制的參數(shù),則會在編譯時發(fā)生錯誤,例如:

Box<String> box = new Box<>("Hello World");    // 編譯錯誤:String 不是 Number 的子類

下界

泛型的下界指定了類型參數(shù)必須是某個類的超類或者是某個接口的實現(xiàn)類。它的語法形式為 T super B,其中T是泛型類型參數(shù),B是下界類型。下面是一個示例,展示了一個泛型類 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、IntegerDouble 等類型的值,因為它們都是 Object 的子類。另外,通過使用泛型的下界,我們可以確保 Box 類的實例中存儲的值都是 Object 類型,避免了類型轉(zhuǎn)換異常的風(fēng)險。

在使用泛型的時候,如果我們傳入一個類型不符合下界限制的參數(shù),則會在編譯時發(fā)生錯誤,例如:

Box<Integer> box = new Box<>(123);    // 編譯錯誤:Integer 不是 Object 的超類

上下界通配符

有時候,我們需要在泛型中同時使用上界和下界的限制,此時可以使用通配符 ? 來表示未知類型。例如,下面的代碼展示了一個泛型方法 copy,它可以將一個數(shù)組的元素復(fù)制到另一個數(shù)組中:

public static <T> void copy(List<? extends T> src, List<? super T> dest) {
    for (T t : src) {
        dest.add(t);
    }
}

在上面的代碼中,我們使用了通配符 ? 來表示未知類型,它可以同時滿足 src 參數(shù)是 T 類型或其子類,dest 參數(shù)是 T 類型或其超類的限制條件。這樣,我們就可以將任意類型的元素復(fù)制到另一個列表中了。通過使用上下界通配符,我們可以更加靈活地定義泛型方法,同時保證類型安全。

總結(jié)

Java中的泛型是一種強類型的機(jī)制,它能夠在編譯時檢查類型的安全性。泛型的上界和下界用于限制類型參數(shù)的范圍,它們可以讓我們更精確地控制類型的使用。在使用泛型時,我們需要根據(jù)實際需求選擇合適的上下界限制,以保證程序的正確性和可靠性。

除了上下界限制外,還可以使用通配符 ? 來表示未知類型,從而更加靈活地定義泛型類和方法。因此,學(xué)習(xí)和掌握泛型機(jī)制對于Java開發(fā)人員來說是非常重要的。

以上就是Java 泛型的上界和下界的詳細(xì)內(nèi)容,更多關(guān)于Java 泛型的上界和下界的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于JDK8總結(jié)java中的interrupt

    基于JDK8總結(jié)java中的interrupt

    本文是基于JDK8總結(jié)java中的interrupt知識,需要的朋友可以參考下
    2017-12-12
  • Java的外部類為什么不能使用private和protected進(jìn)行修飾的講解

    Java的外部類為什么不能使用private和protected進(jìn)行修飾的講解

    今天小編就為大家分享一篇關(guān)于Java的外部類為什么不能使用private和protected進(jìn)行修飾的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 手寫redis@Cacheable注解?支持過期時間設(shè)置方式

    手寫redis@Cacheable注解?支持過期時間設(shè)置方式

    這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時間設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 一分鐘掌握J(rèn)ava?ElasticJob分布式定時任務(wù)

    一分鐘掌握J(rèn)ava?ElasticJob分布式定時任務(wù)

    ElasticJob?是面向互聯(lián)網(wǎng)生態(tài)和海量任務(wù)的分布式調(diào)度解決方案,本文主要通過簡單的示例帶大家深入了解ElasticJob分布式定時任務(wù)的相關(guān)知識,需要的可以參考一下
    2023-05-05
  • mybatis如何批量修改數(shù)據(jù)

    mybatis如何批量修改數(shù)據(jù)

    這篇文章主要介紹了mybatis如何批量修改數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 深入解析Spring中的@Bean注解

    深入解析Spring中的@Bean注解

    這篇文章主要介紹了深入解析Spring中的@Bean注解,Spring的@Bean注解用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理,產(chǎn)生這個Bean對象的方法Spring只會調(diào)用一次,隨后這個Spring將會將這個Bean對象放在自己的IOC容器中,需要的朋友可以參考下
    2023-07-07
  • Mybatis 返回值類型和參數(shù)傳遞的配置方法

    Mybatis 返回值類型和參數(shù)傳遞的配置方法

    在 MyBatis 中,返回值類型和參數(shù)傳遞是 Mapper 接口中至關(guān)重要的兩個方面,正確理解和使用它們可以幫助我們高效、準(zhǔn)確地進(jìn)行數(shù)據(jù)庫操作,接下來通過本文給大家介紹Mybatis 返回值類型和參數(shù)傳遞的配置方法,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 簡單解析execute和submit有什么區(qū)別

    簡單解析execute和submit有什么區(qū)別

    這篇文章主要介紹了簡單解析execute和submit有什么區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • IntelliJ IDEA2020.3詳細(xì)安裝教程

    IntelliJ IDEA2020.3詳細(xì)安裝教程

    這篇文章主要介紹了IntelliJ IDEA2020.3詳細(xì)安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Springboot 自定義校驗代碼實例

    Springboot 自定義校驗代碼實例

    這篇文章主要介紹了Springboot 自定義校驗代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論

合江县| 九龙坡区| 云林县| 曲松县| 英德市| 静乐县| 马边| 沾益县| 县级市| 江西省| 托克逊县| 辰溪县| 大荔县| 泰和县| 广宁县| 罗平县| 桐梓县| 青海省| 贡山| 洞头县| 许昌市| 开阳县| 吴江市| 徐汇区| 萝北县| 长治县| 宽甸| 土默特左旗| 女性| 靖边县| 广水市| 沙洋县| 安义县| 综艺| 肥东县| 南汇区| 容城县| 营山县| 郯城县| 二连浩特市| 于田县|