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

Java中關(guān)于泛型接口的使用說明

 更新時間:2023年08月25日 16:58:07   作者:無奈的碼農(nóng)  
這篇文章主要介紹了Java中關(guān)于泛型接口的使用說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

什么是泛型接口

泛型接口是在接口類中有一個未知對象,一個可變的對象。

從Java 5開始,引入了參數(shù)化類型(Parameterized Type)的概念,改造了所有的Java集合,使之都實現(xiàn)泛型,允許程序在創(chuàng)建集合時就可以指定集合元素的類型,比如List就表名這是一個只能存放String類型的List;

泛型(Generic):就是指參數(shù)化類型,上面的List就是參數(shù)化類型,因此就是泛型,而String就是該List泛型的類型參數(shù);

泛型的好處 

  • 使集合可以記住元素類型,即取出元素的時候無需進行強制類型轉(zhuǎn)化了,可以直接用原類型的引用接收;
  • 一旦指定了性參數(shù)那么集合中元素的類型就確定了,不能添加其他類型的元素,否則會直接編譯保存,這就可以避免了“不小心放入其他類型元素”的可能;
  • 上述保證了如果在編譯時沒有發(fā)出警告,則在運行時就一定不會產(chǎn)生類型轉(zhuǎn)化異常(ClassCastException);
  • 顯然,泛型使編程更加通用,并且代碼也更加簡潔,代碼更加容易維護;

定義泛型類、接口

不僅Java的集合都定義成了泛型,用戶自己也可以定義任意泛型的類、接口,只要在定義它們時用<>來指定類型參數(shù)即可;

例如:

public interface SqlInterFace<T> { ... }

其中指定了該泛型的類型參數(shù),這個T是一個類型參數(shù)名,用戶可以任意命名(就像方法參數(shù)的形參名一樣),只有在定義該泛型的對象時將T替換成指定的具體類型從而產(chǎn)生一個實例化的泛型對象,一個泛型接口可以被多個類實現(xiàn),可以減少接口的開發(fā)。

例如:

SqlInterFace<BondCode> interFace = new BondCodeService();
SqlInterFace<BondDeal> dealSqlInterFace = new BondDealService();
SqlInterFace<BondDealRecord> bondCodeService = new BondDealRecordService();

實現(xiàn)/繼承泛型接口/泛型類

定義泛型和使用泛型的概念:主要區(qū)別就是定義和使用

  • 那Java的方法做類比,Java的方法在定義的時候使用的都是形參(虛擬參數(shù)),但是在調(diào)用方法(使用方法)的時候必須傳入實參;
  • 同樣泛型也有這個特點,泛型的類型參數(shù)和方法的參數(shù)一樣,也是一種參數(shù),只不過是一種特殊的參數(shù),用來表示未知的類型罷了;
  • 因此,泛型也是在定義的時候必須使用形參(虛擬參數(shù),用戶自己隨意命名),但是在使用泛型的時候(比如定義泛型引用、繼承泛型)就必須使用實參,而泛型的實參就是具體的類型,像String、Integer等具體的類型(當(dāng)然也可以是自定義類型);
  • 泛型定義的時候使用形參,例如:public class MyGeneric { … } // T就是一個自己隨意命名的類型形參
  • 使用泛型的時候必須傳入實參:
  • 定義引用(對象)的時候毫無疑問,肯定需要傳實參:ArrayList list = …; // 必須用具體的類型,像這里就是String來代替形參,即實參

實現(xiàn)/繼承一個泛型接口/類的時候

  • 你在實現(xiàn)/繼承一個接口/類的時候?qū)嶋H上是在使用該接口/類,比如:public class Son extends Father { … }中Father這個類就是正在被使用,毫無疑問,必定是在使用;
  • 因此泛型其實無法繼承/實現(xiàn),因為在實現(xiàn)/繼承的時候必須為泛型傳入類型實參,給定實參后它就是一個具體的類型了,就不再是泛型了

示例:

public class MyType extends MyGeneric { … } // implements、extends的時候必須傳入類型實參,因為實在使用泛型?。?/pre>

原則上,任何編程語言都不允許泛型模板層層繼承!!

繼承之后,父類/接口中的所有方法中的類型參數(shù)都將變成具體的類型,你在子類中覆蓋這些方法的時候一定要用具體的類型,不能繼續(xù)使用泛型的類型形參了

泛型參數(shù)繼承

  • 上面派生出來的類不是泛型,是一個實體類型,因為其繼承的泛型是具有類型實參的,而Java還支持一種特殊的語法,可以讓你從泛型繼續(xù)派生出泛型,而泛型的類型參數(shù)可以繼續(xù)傳承下去;
  • 語法如下:
class Father<T> { ... }class Son<T> extends Father<T> { ... }
  • 即子泛型可以傳承父泛型的泛型參數(shù),那么在子類中泛型參數(shù)T就和父類的完全相同,還是照常使用(和父類一樣正常使用);

注意:

這里extends Father了,因此父類泛型Father就是被使用了,而按照之前講的規(guī)則,使用給一個泛型是必須要指定類型實參的!

因此這里的這個語法是一種特殊語法,Java專門為這種語法開了后門,這種語法只有在類型參數(shù)傳承的時候才會用到(即上面這種應(yīng)用);

一旦使用了這種語法,就表示要進行類型參數(shù)的傳承了(即父類的T傳遞給子類繼續(xù)使用,因此子類也是一個跟父類一樣的泛型);

并且一旦使用了這種語法,那么子類定義中的Son和extends Father中的類型參數(shù)必須和定義父類時的類型參數(shù)名完全一樣!!

以下三種情況全部錯誤(全部發(fā)生編譯報錯):

class Father<T> { }
class Son<E> extends Father<T> { }
class Father<T> { }
class Son<T> extends Father<E> { }
class Father<T> { }
class Son<E> extends Father<E> { }

必須全部使用和父類定義相同的類型參數(shù)名(T)!

才行,這是Java語法的特殊規(guī)定;

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • TOPI如何使TVM代碼不那么樣板化

    TOPI如何使TVM代碼不那么樣板化

    這篇文章主要為大家介紹了TOPI如何使TVM代碼不那么樣板化實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Python使用not運算符對布爾值取反的方法

    Python使用not運算符對布爾值取反的方法

    本文詳細(xì)介紹了Python中布爾值的取反操作,包括基本用法、非布爾值的取反、實際場景示例、注意事項以及自定義對象的布爾轉(zhuǎn)換,通過not運算符,可以高效地進行邏輯反轉(zhuǎn),需要的朋友可以參考下
    2026-02-02
  • pytest官方文檔解讀fixtures

    pytest官方文檔解讀fixtures

    這篇文章主要介紹了pytest官方文檔解讀fixtures,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 淺談Python 字符串格式化輸出(format/printf)

    淺談Python 字符串格式化輸出(format/printf)

    下面小編就為大家?guī)硪黄獪\談Python 字符串格式化輸出(format/printf)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 用Python獲取智慧校園每日課表并自動發(fā)送至郵箱

    用Python獲取智慧校園每日課表并自動發(fā)送至郵箱

    很多小伙伴們都在為查看智慧校園課表而煩惱,今天特地整理了這篇文章,不僅可以用Python獲取智慧校園每日課表,還會自動發(fā)至你郵箱,需要的朋友可以參考下
    2021-05-05
  • python修改微信和支付寶步數(shù)的示例代碼

    python修改微信和支付寶步數(shù)的示例代碼

    這篇文章主要介紹了python修改微信和支付寶步數(shù)的示例代碼,本文給大家介紹的非常詳細(xì),對大家的餓學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • pandas把所有大于0的數(shù)設(shè)置為1的方法

    pandas把所有大于0的數(shù)設(shè)置為1的方法

    今天小編就為大家分享一篇pandas把所有大于0的數(shù)設(shè)置為1的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python疊加兩幅柵格圖像的實現(xiàn)方法

    Python疊加兩幅柵格圖像的實現(xiàn)方法

    今天小編就為大家分享一篇Python疊加兩幅柵格圖像的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python中將JSON數(shù)據(jù)寫入文件的實現(xiàn)方法

    Python中將JSON數(shù)據(jù)寫入文件的實現(xiàn)方法

    在Python開發(fā)中,JSON是一種輕量級的數(shù)據(jù)交換格式,常用于前后端數(shù)據(jù)交互、配置文件存儲等場景,當(dāng)我們需要將Python中的字典或列表等數(shù)據(jù)以JSON格式保存到文件時,就需要掌握如何將JSON數(shù)據(jù)寫入文件的方法,所以本文給大家介紹了Python中將JSON數(shù)據(jù)寫入文件的實現(xiàn)方法
    2025-06-06
  • Python中選擇排序的實現(xiàn)與優(yōu)化

    Python中選擇排序的實現(xiàn)與優(yōu)化

    選擇排序(Selection?Sort)是一種簡單但有效的排序算法,本文將詳細(xì)介紹選擇排序算法的原理和實現(xiàn),并提供相關(guān)的Python代碼示例,需要的可以參考一下
    2023-06-06

最新評論

格尔木市| 汤阴县| 谢通门县| 牟定县| 汕头市| 栾川县| 林周县| 大港区| 青川县| 平遥县| 稷山县| 霍邱县| 桑植县| 绵竹市| 昭平县| 大余县| 兴山县| 定陶县| 建始县| 门源| 交口县| 镇坪县| 左权县| 庆安县| 三明市| 怀宁县| 澳门| 伊春市| 大连市| 喀喇| 盐池县| 东方市| 乌兰察布市| 安丘市| 冀州市| 江孜县| 米易县| 九江县| 财经| 马山县| 鄂伦春自治旗|