亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JAVA泛型通配符的上界和下界的具體使用

 更新時間:2025年06月30日 10:00:37   作者:不穿鎧甲的穿山甲  
本文主要介紹了JAVA泛型通配符的上界和下界的具體使用,上界?extends?T適合讀操作,下界?super?T適合寫操作,具有一定的參考價值,感興趣的可以了解一下

在 Java 泛型中,通配符(Wildcard) 用于表示未知的類型。為了增強(qiáng)靈活性和安全性,Java 提供了對通配符的上界(Upper Bound)下界(Lower Bound) 的限制。

一、通配符概述

  • 基本通配符:?
    • 表示未知類型。
    • 示例:List<?> 表示一個元素類型未知的列表。

?? 使用 List<?> 后,不能向其中添加除 null 外的任何元素(因為編譯器不知道具體類型),但可以讀取為 Object。

二、通配符的上界(Upper Bound Wildcard)

語法:

? extends T
  • 表示“某個未知類型,它是 T 的子類型”。
  • 適用于“只讀不寫”的場景。

示例:

List<? extends Number> list = new ArrayList<Integer>();

可以讀取元素為 Number 類型:

Number num = list.get(0);

? 不允許添加元素(除了 null):

list.add(123); // 編譯錯誤!不知道實際類型是 Integer 還是 Double 等

用途:

  • 當(dāng)你只需要從集合中讀取數(shù)據(jù),并希望它能接受多種子類型時使用。

三、通配符的下界(Lower Bound Wildcard)

語法:

? super T
  • 表示“某個未知類型,它是 T 的父類型”。
  • 適用于“只寫不讀”的場景。

示例:

List<? super Integer> list = new ArrayList<Number>();

可以添加 Integer 類型的對象:

list.add(10);

? 讀取時只能作為 Object 類型:

Object obj = list.get(0); // 無法知道具體是 Number、Object 還是其他父類

用途:

  • 當(dāng)你需要將某種具體類型的數(shù)據(jù)寫入集合,并且該集合的類型必須是它的父類時使用。

四、對比總結(jié)

通配符形式含義可否添加元素可否讀取元素典型用途
?任意類型??(作為 Object)通用只讀集合
? extends TT 或其子類??(作為 T)讀取特定類型的集合
? super TT 或其父類??(作為 Object)寫入特定類型的集合

小技巧:PECS 原則(Producer Extends, Consumer Super)

這是理解泛型通配符的經(jīng)典原則:

  • Producer(生產(chǎn)者) → 使用 extends(只讀)
  • Consumer(消費(fèi)者) → 使用 super(只寫)

示例代碼:

public static void copy(List<? extends Number> source,
                        List<? super Number> dest) {
    for (Number number : source) {
        dest.add(number); // 寫入到 dest
    }
}

總結(jié)

  • 使用 ? extends T 來限定上界,適合讀操作。
  • 使用 ? super T 來限定下界,適合寫操作。
  • 結(jié)合 PECS 原則,可以更安全地使用泛型集合。

到此這篇關(guān)于JAVA泛型通配符的上界和下界的具體使用的文章就介紹到這了,更多相關(guān)JAVA泛型通配符上界和下界內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • GraalVM系列Native?Image?Basics靜態(tài)分析

    GraalVM系列Native?Image?Basics靜態(tài)分析

    這篇文章主要為大家介紹了GraalVM系列Native?Image?Basics靜態(tài)分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • MyBatis-Plus中公共字段的統(tǒng)一處理的實現(xiàn)

    MyBatis-Plus中公共字段的統(tǒng)一處理的實現(xiàn)

    在開發(fā)中經(jīng)常遇到多個實體類有共同的屬性字段,這些字段屬于公共字段,本文主要介紹了MyBatis-Plus中公共字段的統(tǒng)一處理的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • springboot跨域CORS處理代碼解析

    springboot跨域CORS處理代碼解析

    這篇文章主要介紹了springboot跨域CORS處理代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • java中簡單的截取分割字符串實例

    java中簡單的截取分割字符串實例

    下面小編就為大家?guī)硪黄猨ava中簡單的截取分割字符串實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 詳解Kotlin的空指針處理

    詳解Kotlin的空指針處理

    這篇文章主要介紹了詳解Kotlin的空指針處理的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Spring Cloud Zuul路由網(wǎng)關(guān)服務(wù)過濾實現(xiàn)代碼

    Spring Cloud Zuul路由網(wǎng)關(guān)服務(wù)過濾實現(xiàn)代碼

    這篇文章主要介紹了Spring Cloud Zuul路由網(wǎng)關(guān)服務(wù)過濾實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java Comparable和Comparator對比詳解

    Java Comparable和Comparator對比詳解

    這篇文章主要介紹了Java Comparable和Comparator對比詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java實現(xiàn)多文件壓縮打包的方法

    Java實現(xiàn)多文件壓縮打包的方法

    這篇文章主要介紹了Java實現(xiàn)多文件壓縮打包的方法,結(jié)合實例形式分析了java實現(xiàn)zip文件壓縮與解壓縮相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Spring Boot設(shè)置支持跨域請求過程詳解

    Spring Boot設(shè)置支持跨域請求過程詳解

    這篇文章主要介紹了Spring Boot設(shè)置支持跨域請求過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot中間件之封裝統(tǒng)一白名單配置

    SpringBoot中間件之封裝統(tǒng)一白名單配置

    這篇文章主要介紹了SpringBoot中間件封裝統(tǒng)一白名單配置,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07

最新評論