一篇讓你徹底搞懂java泛型通配符的文章

来源:https://www.cnblogs.com/java265/archive/2022/06/17/16336090.html
-Advertisement-
Play Games

分類方式 按參數分: 有參構造(預設構造) & 無參構造 按類型分: 普通構造 & 拷貝構造 調用方式 括弧法 顯示法 隱式轉換法 PS:下方所有文本均以此代碼為基礎 1 class Person { 2 public: 3 //無參構造函數 4 Person() { 5 std::cout << ...


 轉自:

 http://www.java265.com/JavaJingYan/202206/16540949953608.html

泛型:通常定義一些以後使用的類型,在代碼編寫時,類型採用占位符的形式,當然這些占位符,也可以設置其上限,下限等。
下文筆者將用一篇文章,讓你徹底明白java泛型通配符,如下所示

泛型通配符的簡介

泛型通配符:“指可以匹配任意類型”的類型,我們將其稱之為“通配符”
在java中有三種類型的通配符,分別為:
  無界,有上限,有下限
 那麼他們分別表示什麼呢?下文筆者將一一道來,如下所示:
泛型無界通配符
無邊界通配符(Unbounded Wildcards):
   讓泛型可接收任意未知類型的數據
採用 ? 形式定義
 如: List<?> 
泛型有上界通配符
泛型上界通配符(Upper bounded Wildcards):
   讓泛型可接收指定類及其子類的數據
採用 ? extends E  形式定義
 如: List<? extends E>
    可接收類型為E,或者E的子類 
泛型有下界通配符
泛型下界通配符(Lower bounded Wildcards):
   讓泛型可接收指定類及其父類類的數據
採用 ? super E  形式定義
 如: List<? super E>
    可接收E類或者它的父類 

Java泛型通配符的示例分享

例:
定義一個方法可以列印任意類型集合的數據

public class GernericTest {
    public static void main(String[] args) throws Exception{
        List<Integer> list1 =new ArrayList<Integer>();
        List<String>  list2 =new ArrayList<String>();
        printCollection(list1);
        printCollection(list2);    
    } 
    public static void printCollection(Collection<Object> collection){
        for(Object obj:collection){
            System.out.println(obj);
        }  
    }
}
以上代碼會報錯:
語句 printCollection(list1); 報錯:
The method printCollection(Collection<Object>) in the type GernericTest is not applicable for the arguments (List<Integer>)
因為泛型不能使用繼承屬性,必須使用?通配符

正確的寫法:
public class GernericTest {
    public static void main(String[] args) throws Exception{
        List<Integer> list1 =new ArrayList<Integer>();
        List<String> list2 =new ArrayList<String>();
        printCollection(list1);
        printCollection(list2);
    }

    //定義泛型無界通配符
    public static void printCollection(Collection<?> collection){
        for(Object obj:collection){
            System.out.println(obj);
        }
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分享嘉賓:張政 京東 演算法工程師 編輯整理:AMS 周金星 出品平臺:DataFunTalk 導讀: 內容生態建設是近幾年互聯網快速發展的關鍵動因,也是AI化的重點方向之一。本文主要分享在京東廣告業務下內容理解體系的建設情況,從標簽化、內容準入、質量美學評價等多個角度探討內容理解能力的應用;同時整體 ...
  • SQL的函數 函數的定義 函數是指一段可以直接被另一段程式調用的程式或代碼; 字元串函數 MySQL常用的字元串函數 函數 功能 concat(s1,s2,···sN) 字元串拼接,將s1···sN拼接為一個字元串 lower(str) 將字元串str全部轉換為小寫 upper(str) 將字元串s ...
  • 華為應用內支付服務(In-App Purchases,IAP)為開發者提供便捷的應用內支付體驗和簡便的接入流程。開發者的應用集成IAP SDK後,調用IAP SDK介面,啟動IAP收銀台,即可實現應用內支付。在集成過程中,開發者可能會遇到報錯的問題,這時我們可以通過查找日誌中的tag的方法對問題快速 ...
  • 今天把平臺屬性的管理基本完成了,後臺管理做到現在基本也開始熟悉,確實就是對ElementUI的一個熟練程度。 一.平臺屬性管理 1.動態展示數據 先把介面弄好,應該在第三級標題選擇後進行發請求 靜態頁面搭建 渲染數據 屬性值列表,用到一個新組件 tag,並且這裡有多個屬性值,所以要遍歷,既然要在裡面 ...
  • 這裡給大家分享我在OpenLayers 地圖開發工作中總結出的一下代碼和註意點,希望對大家有所幫助 效果如下: 核心代碼展示:附帶講解註釋 var map = new ol.Map({ // 初始化地圖 target: 'map',// 選擇地圖對象 layers: [ new ol.layer.T ...
  • springboot整合ueditor實現圖片上傳和文件上傳功能 寫在前面: 在閱讀本篇之前,請先按照我的這篇隨筆完成對ueditor的前期配置工作: springboot+layui 整合百度富文本編輯器ueditor入門使用教程(踩過的坑)https://www.cnblogs.com/rain ...
  • 1、前言 作為嵌入式軟體開發,可能經常會使用命令行或者顯示屏等設備實現人機交互的功能,功能中通常情況都包含 UI 菜單設計;很多開發人員都會有自己的菜單框架模塊,防止重覆造輪子,網上有很多這種菜單框架的代碼,但是大多耦合性太強,無法獨立出來適配不同的菜單設計。 本文介紹一個降低了耦合性,完全獨立的菜 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
一周排行
    -Advertisement-
    Play Games
  • 背景 在瀏覽器中訪問本地靜態資源html網頁時,可能會遇到跨域問題如圖。 是因為瀏覽器預設啟用了同源策略,即只允許載入與當前網頁具有相同源(協議、功能變數名稱和埠)的內容。 WebView2預設情況下啟用了瀏覽器的同源策略,即只允許載入與主機相同源的內容。所以如果我們把靜態資源發佈到iis或者通過node ...
  • 最近看幾個老項目的SQL條件中使用了1=1,想想自己也曾經這樣寫過,略有感觸,特別拿出來說道說道。編寫SQL語句就像炒菜,每一種調料的使用都會影響菜品的最終味道,每一個SQL條件的加入也會影響查詢的執行效率。那麼 1=1 存在什麼樣的問題呢?為什麼又會使用呢? ...
  • 好久不見,我又回來了。 給大家分享一個我最近使用c#代碼操作ftp伺服器的代碼示例: 1 public abstract class FtpOperation 2 { 3 /// <summary> 4 /// FTP伺服器地址 5 /// </summary> 6 private string f ...
  • 一:背景 1. 講故事 過年喝了不少酒,腦子不靈光了,停了將近一個月沒寫博客,今天就當新年開工寫一篇吧。 去年年初有位朋友找到我,說他們的系統會偶發性崩潰,在網上也發了不少帖子求助,沒找到自己滿意的答案,讓我看看有沒有什麼線索,看樣子這是一個牛皮蘚的問題,既然對方有了dump,那就分析起來吧。 二: ...
  • 自己製作的一個基於Entity Framework Core 的資料庫操作攔截器,可以列印資料庫執行sql,方便開發調試,代碼如下: /// <summary> /// EF Core 的資料庫操作攔截器,用於在資料庫操作過程中進行日誌記錄和監視。 /// </summary> /// <remar ...
  • 本文分享自華為雲社區《Go併發範式 流水線和優雅退出 Pipeline 與 Cancellation》,作者:張儉。 介紹 Go 的併發原語可以輕鬆構建流數據管道,從而高效利用 I/O 和多個 CPU。 本文展示了此類pipelines的示例,強調了操作失敗時出現的細微之處,並介紹了乾凈地處理失敗的 ...
  • 在上篇文章中,我們介紹到在多線程環境下,如果編程不當,可能會出現程式運行結果混亂的問題。出現這個原因主要是,JMM 中主記憶體和線程工作記憶體的數據不一致,以及多個線程執行時無序,共同導致的結果。 ...
  • 1、下載安裝包首先、進入官網下載安裝包網址:https://www.python.org/downloads/windows/下載步驟:進入下載地址,根據自己的電腦系統選擇相應的python版本 選擇適配64位操作系統的版本(查看自己的電腦操作系統版本), 點擊下載安裝包 也可以下載我百度雲分享的安 ...
  • 簡介 git-commit-id-maven-plugin 是一個maven 插件,用來在打包的時候將git-commit 信息打進jar中。 這樣做的好處是可以將發佈的某版本和對應的代碼關聯起來,方便查閱和線上項目的維護。至於它的作用,用官方說法,這個功能對於大型分散式項目來說是無價的。 功能 你 ...
  • 序言 在數字時代,圖像生成技術正日益成為人工智慧領域的熱點。 本討論將重點聚焦於兩個備受矚目的模型:DALL-E和其他主流AI繪圖方法。 我們將探討它們的優勢、局限性以及未來的發展方向。通過比較分析,我們期望能夠更全面地瞭解這些技術,為未來的研究和應用提供啟示。 Q: 介紹一下 dall-e Ope ...