日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

android 集成同一interface不同泛型_【Java视频教程】day30-泛型??

發布時間:2023/12/18 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 集成同一interface不同泛型_【Java视频教程】day30-泛型?? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

泛型

泛型的引入

需求:打印集合中所有字符串的長度;

結論:

再使用集合時,因為集合中可以保存不同類型的數據,保存進入集合后不管什么類型的數據都會自動向上轉型為Object類型,

所以實際使用時一般需要強制向下轉型為原來的類型;一旦使用強制向下轉型,就有可能會出現類型轉換異常;

解決辦法:

  • 不對集合中保存的數據類型作限制,而是在使用時先判斷數據類型是否正確;這種解決辦法不好,因為違背了 誰的職責由誰負責 的原則;
  • 在使用集合保存數據時一個集合對象只保存一種類型的數據;使用這種辦法可以解決問題,但是怎么保證一個集合對象中只保存一種類型的數據呢?
  • 靠程序員自覺是不行的,最好能有一種技術手段,強制要求一個容器只能保存一種類型的數據;

    Java中從JDK5開始提供了這種手段,就是泛型技術;

    泛型介紹

    泛型,又叫做參數化類型(就是類型的變量),可以在編譯期對數據類型(只能是引用數據類型)進行限制;

    泛型的寫法:

    <類型的變量名>

    泛型使用演示:

    我們來使用泛型解決上面的問題:

    使用List集合時給泛型傳參的圖解:

    泛型技術,只是在編譯期有效,編譯后class中就沒有泛型;
    編譯后泛型消失,又叫做泛型的擦除;

    泛型只是一種在編譯期對數據類型進行檢查的技術,不僅僅用在集合技術中;

    使用泛型,可以在編譯期就對數據的類型進行強制檢查,避免運行期出現類型轉換異常,提高程序的健壯性。

    https://www.zhihu.com/video/1069348635325665280

    泛型的簡單應用

    需求:向集合中添加學生對象,要求按照學生的年齡進行從小到大排序

    public https://www.zhihu.com/video/1069348709585883136

    自定義泛型

    根據泛型書寫的位置,可以分為三種:

    類的泛型,接口的泛型,和方法的泛型;

    • 泛型類

    格式:

    class

    需求:定義一個工具類,可以保存和獲取一個任意類型的對象;

    問題:

    類上的泛型是一個變量,那么這個變量是什么時候賦值的呢?

    類上的泛型就是這個類的非靜態成員變量,所以是在創建這個類的對象的時候給泛型變量賦值;

    使用泛型類需要注意:

  • 靜態函數不能使用類的泛型
  • 如果一個類要定義多個泛型,都要寫在同一個尖括號中,不同的泛型之間使用逗號隔開;
  • https://www.zhihu.com/video/1069348937093128192

    泛型接口

    類上可以定義泛型,接口上也可以定義泛型;

    格式:

    interface

    如果在定義一個接口時在接口上使用泛型,這個接口就成為泛型接口;

    1、接口的泛型,在實現接口時可以確定;

    此時,這個類并不是泛型類,而且這個接口中所有使用泛型的方法都不在使用泛型,參數的類型將直接固定下來,不在變化;

  • 在一個類實現一個泛型接口的時候,可以不指定泛型的具體類型,就需要將這個類定義為泛型類;
  • 類似這樣,泛型通過接口實現或者說類的繼承的方式,從接口轉移到類上(或者父類轉移到子類上),叫做泛型的傳遞;

    https://www.zhihu.com/video/1069349108199915520

    泛型方法

    除了類和接口上可以定義泛型,方法上也可以定義泛型;

    書寫格式是:在函數的返回值類型前面加上泛型,如:

    public

    定義在方法上的泛型,相當于這個方法中的一個局部變量,不能這個函數之外的地方使用;

    注意:泛型就是類型的變量,定義在方法中的泛型就是定義在方法里的變量,是一個局部變量,所以其它函數中不能使用;

    如果方法要接受的參數不確定,而且和類上的泛型不一致,就可以在方法上自己定義泛型;

    練習:提供一個功能,向List集合中添加某種類型數據;

    https://www.zhihu.com/video/1069349291189043200

    泛型通配符

    泛型中的通配符

    練習:說出下面代碼中泛型的實際類型;

    public

    如果不知道具體的類型是什么,就要使用泛型的通配符表示,表示可以匹配不同的類型:

    泛型的通配符,使用一個問號表示,格式是:

    <?>

    需求:定義功能,可以輸出保存不同類型數據的List集合中的元素,

    問題:

    Java的泛型中,T和?有什么區別?

    T表示是一個變量,不是一個具體的類型;

    ?表示通配符,可以匹配不同的類型,不是固定的一種類型;是一種值;

    https://www.zhihu.com/video/1069349573805395968

    泛型的上限和下限

    如果具體類型不確定,但是只能是某種類型或它的子類,就可以使用泛型的上限,格式是:

    <?

    如果具體類型不確定,但是只能是某種類型或它的父類,就可以使用泛型的下限,格式是:

    <?

    注意:

    集合中使用泛型的上限時,能夠從集合中取數據,保存到上限類型或者Object類型;但是不能向集合中添加數據,因為不確定運行時傳遞過來的集合實際保存的數據的類型;

    集合中使用泛型的下限時,可以向集合中添加下限類型或者下限類型的子類型的數據,但是不能從集合中取數據放到下限類型,因為很有可能集合中保存的是下限類型的父類型;

    https://www.zhihu.com/video/1069350681604927488

    泛型總結

  • 泛型是一種在編譯期就可以進行數據類型的檢查的技術,只能檢查引用類型的數據類型;
  • 泛型使用一對尖括號表示:<標識符>;尖括號中的標識符,表示一個引用數據類型;
  • 泛型可以定義在類、方法和接口上;
  • 定義在類上:書寫在類名后面,在創建類的實例對象時確定泛型的具體類型;在類中的非靜態函數中可以使用;
  • 定義在方法上:書寫在方法的返回值類型前面,在方法調用時確定泛型的具體類型,靜態和非靜態函數都能定義;只能在當前定義的這個方法里使用;
  • 定義在接口上:書寫在接口名后面,實現接口時可以明確泛型的具體類型,或者通過泛型類,在創建類的對象時才明確具體類型;
  • 泛型的通配符:當需要使用的泛型的數據類型是不確定的時候,就需要使用泛型的通配符;
  • 通配符的寫法:<?>

  • 泛型的通配符的上限和下限:
  • 在定義泛型的通配符的時候,如果只能匹配某個類或者這個類的子類,就需要使用通配符的上限,寫法是:<? extends 上限的類型>
  • 在定義泛型的通配符的時候,如果只能匹配某個類或者這個類的父類,就需要使用通配符的下限,寫法是:<? super 下限的類型>
  • 總結

    以上是生活随笔為你收集整理的android 集成同一interface不同泛型_【Java视频教程】day30-泛型??的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。