java泛型通配符?及上下界(extends,super)保證安全性、靈活性、可讀性

在 Java 中,泛型通配符(?)用于表示未知類型,通常用于增強泛型的靈活性。通配符可以與上下限結合使用,以限制泛型的范圍。以下是通配符及上下限的使用示例:


1. 無界通配符 (?)

無界通配符表示可以接受任意類型的泛型參數。

public static void printList(List<?> list) {for (Object element : list) {System.out.println(element);}
}
  • 示例調用:
    List<Integer> intList = Arrays.asList(1, 2, 3);
    List<String> stringList = Arrays.asList("Hello", "World");
    printList(intList);    // 輸出: 1 2 3
    printList(stringList); // 輸出: Hello World
    

2. 上界通配符 (<? extends T>)

上界通配符表示泛型類型必須是 T 或其子類。

public static double sumOfList(List<? extends Number> list) {double sum = 0.0;for (Number number : list) {sum += number.doubleValue();}return sum;
}
  • 示例調用:
    List<Integer> intList = Arrays.asList(1, 2, 3);
    List<Double> doubleList = Arrays.asList(1.1, 2.2, 3.3);
    System.out.println(sumOfList(intList));    // 輸出: 6.0
    System.out.println(sumOfList(doubleList)); // 輸出: 6.6
    

3. 下界通配符 (<? super T>)

下界通配符表示泛型類型必須是 T 或其父類。

public static void addNumbers(List<? super Integer> list) {list.add(1);list.add(2);list.add(3);
}
  • 示例調用:
    List<Number> numberList = new ArrayList<>();
    addNumbers(numberList);
    System.out.println(numberList); // 輸出: [1, 2, 3]
    

4. 上下限通配符的綜合使用

上下限通配符通常用于泛型類或方法中,以限制泛型類型的范圍。

public static <T> void copy(List<? extends T> src, List<? super T> dest) {for (T item : src) {dest.add(item);}
}
  • 示例調用:
    List<Integer> srcList = Arrays.asList(1, 2, 3);
    List<Number> destList = new ArrayList<>();
    copy(srcList, destList);
    System.out.println(destList); // 輸出: [1, 2, 3]
    

總結:

  1. ?:無界通配符,接受任意類型。
  2. <? extends T>:上界通配符,限制為 T 或其子類。
  3. <? super T>:下界通配符,限制為 T 或其父類。

通過合理使用通配符和上下限,可以增強泛型的靈活性,同時保證類型安全。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897999.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

技術視界|構建理想仿真平臺,加速機器人智能化落地

在近期的 OpenLoong 線下技術分享會 上&#xff0c;松應科技聯合創始人張小波進行了精彩的演講&#xff0c;深入探討了仿真技術在機器人智能化發展中的關鍵作用。他結合行業趨勢&#xff0c;剖析了現有仿真平臺的挑戰&#xff0c;并描繪了未來理想仿真系統的設計理念與實現路徑…

uniapp-x 之useAttrs只讀

數據類型&#xff1a; useAttrs在web端拿到的是obj&#xff0c;app拿到的是map 是否可以修改內部元素&#xff1a; 否&#xff0c;只讀 這意味著你想這樣寫代碼將會無效 let attrsuseAttrs();console.log("attrs",attrs, attrs instanceof Map)//appif(attrs ins…

Python 正則表達式模塊 re

Python 正則表達式模塊 re flyfish 一、正則表達式基礎 1. 什么是正則表達式&#xff1f; 正則表達式&#xff08;Regular Expression, RE&#xff09;是一種用于匹配、查找和替換文本模式的工具&#xff0c;由普通字符&#xff08;如字母、數字&#xff09;和特殊字符&…

【商城實戰(33)】解鎖版本迭代與更新策略

【商城實戰】專欄重磅來襲&#xff01;這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建&#xff0c;運用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用戶、商品、訂單等核心模塊開發&#xff0c;再到性能優化、安全加固、多端適配&#xf…

環境配置 | 5分鐘極簡Git入門:從零上手版本控制

你是否剛接觸Git&#xff1f;別擔心&#xff01;這篇指南將用最簡單的步驟帶你掌握Git核心操作&#xff0c;快速開啟版本控制之旅&#xff01;? 1.git在win10上的下載安裝 1.1.下載git 打開官方網站 Git - Downloadshttps://git-scm.com/downloads ? ?? 1.2.git安裝 …

計算機網絡——DNS

一、什么是DNS&#xff1f; DNS&#xff08;Domain Name System&#xff0c;域名系統&#xff09; 是互聯網的核心服務&#xff0c;負責將人類可讀的域名&#xff08;如 www.baidu.com&#xff09;轉換為機器可識別的 IP地址&#xff08;如 14.119.104.254&#xff09;。它像一…

SQLark 實戰 | 如何從Excel、csv、txt等外部文件進行數據導入

數據導入導出是應用開發者在平時開發中最常用的操作之一&#xff0c;SQLark 里提供了方便的圖形化界面來完成導入導出。本文先和大家分享如何從 Excel、csv、txt 等外部文件導入數據到數據庫表中。 &#x1f449; 前往 SQLark 官網&#xff1a;www.sqlark.com 下載全功能免費版…

docker無法正常拉取鏡像問題的解決

目錄 1.前言 2.解決方案 1.前言 安裝docker后拉取鏡像&#xff0c;遇見了如下問題&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded whil…

k8s系統學習路徑

學習 Kubernetes&#xff08;K8s&#xff09;需要循序漸進&#xff0c;結合理論知識和實踐操作。以下是學習 Kubernetes 的推薦步驟&#xff1a; 1. 先決條件 ? 掌握容器基礎&#xff1a;先學習 Docker&#xff0c;理解容器化概念&#xff08;鏡像、容器、倉庫&#xff09;、…

@RequestParam、@RequestBody、@PathVariable

1. RequestParam RequestParam&#xff1a;get請求時如果用不到它的3個屬性&#xff0c;可以省略&#xff1b;其他請求如果是通過param傳送數據&#xff0c;必須使用該注釋 要點&#xff1a; 可用于任何類型的請求&#xff08;get請求數據在請求行中&#xff0c; post請求數據…

麒麟系統利用pycharm生成deb文件

在麒麟系統&#xff08;Kylin OS&#xff09;上使用 PyCharm 進行 Python 開發并生成 .deb 可安裝軟件包&#xff0c;可以按照以下步驟進行操作&#xff1a; 1. 準備工作 安裝 PyCharm&#xff1a;確保已經在麒麟系統上安裝了 PyCharm&#xff0c;可以使用官方提供的安裝包進…

微信小程序接入DeepSeek模型(火山方舟),并在視圖中流式輸出

引言&#xff1a; DeepSeek&#xff0c;作為一款先進的自然語言處理模型&#xff0c;以其強大的文本理解和生成能力著稱。它能夠處理復雜的文本信息&#xff0c;進行深度推理&#xff0c;并快速給出準確的回應。DeepSeek模型支持流式處理&#xff0c;這意味著它可以邊計算邊輸…

釘釘(excel)能讓表格中不是‘北京’的字符串自動加亮顯示(方便查看)以及隔行填充嚴顏色是斑馬色(方便查看)嘛

在釘釘在線表格中&#xff0c;雖然功能相對Excel有所簡化&#xff0c;但仍然可以通過條件格式實現對特定內容的高亮顯示。以下是具體步驟&#xff1a; 一、在釘釘在線表格中設置條件格式 1. 打開釘釘在線表格 登錄釘釘&#xff0c;進入“釘釘在線表格”應用。 打開你需要操作…

Windows根據文件名批量在文件夾里查找文件并復制出來,用WPF實現的詳細步驟

項目前言 在日常工作和生活中&#xff0c;我們常常會遇到需要從大量文件中根據文件名批量查找特定文件并復制到指定位置的情況。手動一個個查找和復制文件不僅效率低下&#xff0c;還容易出錯。使用 Windows Presentation Foundation (WPF) 可以創建一個用戶友好的圖形界面應用…

PHP語法基礎

PHP語法基礎 一&#xff0c;變量 在PHP中&#xff0c;變量是存儲數據的容器&#xff0c;其靈活性和動態類型系統是PHP的核心特性之一。以下是PHP變量的詳細解析&#xff0c;涵蓋聲明、作用域、類型轉換及最佳實踐&#xff1a; 1. 變量基礎 聲明與命名規則 無需顯式聲明類型&…

Java 并發編程——BIO NIO AIO 概念

參考 Java 并發編程——BIO NIO AIO 概念 阻塞與非阻塞、同步與異步概念 系統調用、緩存、物理設備阻塞與非阻塞同步與異步 四種主要的 IO 模型 同步阻塞 IO同步非阻塞 IOIO 多路復用異步 IO select&#xff0c;poll&#xff0c;epoll 系統調用命令

探索Maas平臺與阿里 QWQ 技術:AI調參的魔法世界

摘要&#xff1a;本文介紹了藍耘 Maas 平臺在人工智能領域的表現及其核心優勢&#xff0c;包括強大的模型支持、高效的資源調度和友好的操作界面。文章還探討了藍耘 Maas 平臺與阿里 QWQ 技術的融合亮點及應用拓展實例&#xff0c;并提供了調參實戰指南&#xff0c;最后對藍耘 …

Python 實現大文件的高并發下載

項目背景 基于一個 scrapy-redis 搭建的分布式系統&#xff0c;所有item都通過重寫 pipeline 存儲到 redis 的 list 中。這里我通過代碼演示如何基于線程池 協程實現對 item 的中文件下載。 Item 結構 目的是為了下載 item 中 attachments 保存的附件內容。 {"crawl_tim…

MySQL與Canal、RabbitMQ集成指南

MySQL 部分 1. 查看是否開啟 binlog MySQL 8 默認開啟 binlog。可以通過以下命令查看是否開啟&#xff1a; SHOW VARIABLES LIKE log_bin;如果返回結果為 ON&#xff0c;則表示 binlog 已開啟。 Variable_nameValuelog_binON 2. 若未開啟 binlog&#xff0c;則需手動配置 …

X86 RouterOS 7.18 設置筆記十:上海電信IPTV使用msd_lite實現組播轉單撥

X86 j4125 4網口小主機折騰筆記五&#xff1a;PVE安裝ROS RouterOS X86 RouterOS 7.18 設置筆記一&#xff1a;基礎設置 X86 RouterOS 7.18 設置筆記二&#xff1a;網絡基礎設置(IPV4) X86 RouterOS 7.18 設置筆記三&#xff1a;防火墻設置(IPV4) X86 RouterOS 7.18 設置筆記四…