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

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

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

在 Java 泛型中,通配符(Wildcard) 用于表示未知的類型。為了增強靈活性和安全性,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(消費者) → 使用 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)文章

  • IDEA Maven依賴下載總是失敗的幾種解決方法

    IDEA Maven依賴下載總是失敗的幾種解決方法

    我們本地使用 IDEA 運行 maven 項目的時候,有時候運氣不好,就會遇到某些 maven 依賴無法正常找到、導(dǎo)入,這就會導(dǎo)致 IDEA 構(gòu)建項目的時候爆出一堆醒目的紅色 Error,今天給大家分享IDEA Maven依賴下載總是失敗的幾種解決方法,感興趣的朋友一起看看吧
    2023-09-09
  • Java設(shè)計模式系列之深入淺出單例模式

    Java設(shè)計模式系列之深入淺出單例模式

    設(shè)計模式是在大量的實踐中總結(jié)和理論之后優(yōu)選的代碼結(jié)構(gòu),編程風(fēng)格,以及解決問題的思考方式,下面這篇文章主要給大家介紹了關(guān)于Java設(shè)計模式系列之深入淺出單例模式的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • java使用緩沖流復(fù)制文件的方法

    java使用緩沖流復(fù)制文件的方法

    這篇文章主要為大家詳細(xì)介紹了java使用緩沖流復(fù)制文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 一文帶你深入了解Java的自動拆裝箱

    一文帶你深入了解Java的自動拆裝箱

    Java推出了對于基本數(shù)據(jù)類型的對應(yīng)的對象,將基本數(shù)據(jù)類型轉(zhuǎn)換為對象就稱為裝箱,反之則是拆箱,本文主要為大家介紹了Java自動拆裝箱的原理與應(yīng)用,需要的可以參考下
    2023-11-11
  • Java實現(xiàn)的各種排序算法(插入排序、選擇排序算法、冒泡排序算法)

    Java實現(xiàn)的各種排序算法(插入排序、選擇排序算法、冒泡排序算法)

    本文是小編給大家?guī)淼膉ava各種排序算法知識,包括插入排序、選擇排序算法、冒泡排序算法,代碼簡單易懂,需要的朋友可以參考下
    2016-08-08
  • 將ResultSet中得到的一行或多行結(jié)果集封裝成對象的實例

    將ResultSet中得到的一行或多行結(jié)果集封裝成對象的實例

    這篇文章主要介紹了將ResultSet中得到的一行或多行結(jié)果集封裝成對象的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • java springboot的概述、特點與構(gòu)建介紹

    java springboot的概述、特點與構(gòu)建介紹

    大家好,本篇文章主要講的是springboot的概述、特點與構(gòu)建介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Spring中@Component和@Bean的深度對比解析

    Spring中@Component和@Bean的深度對比解析

    在Spring框架中,@Component和@Bean都是實現(xiàn)依賴注入的核心注解,但它們的應(yīng)用場景和實現(xiàn)機制存在顯著差異,本文將通過代碼示例和原理拆解,深入探討二者的區(qū)別,感興趣的朋友一起看看吧
    2025-06-06
  • springboot利用AOP完成日志統(tǒng)計的詳細(xì)步驟

    springboot利用AOP完成日志統(tǒng)計的詳細(xì)步驟

    項目用到了過濾器,可能有的人會不理解,之所以用過濾器是因為想要在日志記錄post請求的json數(shù)據(jù)。本文重點給大家介紹springboot利用AOP完成日志統(tǒng)計的詳細(xì)步驟,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • SpringMVC 重定向參數(shù)RedirectAttributes實例

    SpringMVC 重定向參數(shù)RedirectAttributes實例

    這篇文章主要介紹了SpringMVC 重定向參數(shù)RedirectAttributes實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

建德市| 沧源| 白银市| 十堰市| 洱源县| 敦煌市| 鄯善县| 鹰潭市| 山西省| 会东县| 孟州市| 虹口区| 綦江县| 西宁市| 达拉特旗| 彭山县| 曲沃县| 太仓市| 永川市| 济宁市| 上思县| 六盘水市| 浦城县| 新化县| 老河口市| 揭阳市| 郸城县| 渑池县| 偃师市| 宜兴市| 长治县| 济源市| 潼关县| 景德镇市| 全南县| 湖州市| 临城县| 黑水县| 海南省| 武安市| 吕梁市|