最新国产好看的视频,伊人天堂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 等

用途:

  • 當你只需要從集合中讀取數(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 還是其他父類

用途:

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

四、對比總結

通配符形式含義可否添加元素可否讀取元素典型用途
?任意類型??(作為 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
    }
}

總結

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

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

相關文章

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

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

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

    Java設計模式系列之深入淺出單例模式

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

    java使用緩沖流復制文件的方法

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

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

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

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

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

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

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

    java springboot的概述、特點與構建介紹

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

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

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

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

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

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

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

最新評論

天峻县| 远安县| 博客| 金门县| 沧州市| 永胜县| 宁安市| 柞水县| 通榆县| 张家界市| 海淀区| 长垣县| 崇左市| 南开区| 象山县| 建平县| 溧阳市| 滨海县| 双鸭山市| 桃江县| 五华县| 余江县| 保定市| 平凉市| 巴彦淖尔市| 富裕县| 淳化县| 湘潭市| 永川市| 郎溪县| 中卫市| 安丘市| 高碑店市| 兴业县| 广宗县| 临武县| 津南区| 潮安县| 贵州省| 农安县| 平南县|