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

Java泛型機(jī)制必要性及原理解析

 更新時(shí)間:2020年05月01日 11:14:19   作者:Hello_xzy_World  
這篇文章主要介紹了Java泛型機(jī)制必要性及原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

泛型程序設(shè)計(jì)(Generic Programming)

“使用泛型機(jī)制編寫的程序代碼要比那些雜亂地使用Object變量,然后再進(jìn)行強(qiáng)制類型轉(zhuǎn)換的代碼具有更好的安全性和可讀性。泛型對于集合類尤其有用?!?/p>

1.意義、必要性、重要性

泛型程序設(shè)計(jì) 意味著編寫的代碼可以被很多不同類型的對象所重用。例如,我們并不希望為聚集String和File對象分別設(shè)計(jì)不同的類。實(shí)際上,也不需要這樣做,因?yàn)橐粋€(gè)ArrayList類就可以聚集任何類型的對象。這是一個(gè)泛型程序設(shè)計(jì)的實(shí)例。

事實(shí)上,在Java增加泛型機(jī)制前就存在一個(gè)ArrayList類。下面借助ArrayList類的演變來說明Java引入泛型機(jī)制到底有重要。

在Java引入泛型類之前,ArrayList類將維護(hù)一個(gè)Object引用的數(shù)組:

public class ArrayList{
  private Object[] elementData;
  ...
  public Object get(int i){...}
  public void add(Object o){...}
}

使用這種ArrayList類存在兩個(gè)問題:

每獲取一個(gè)值都必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。

ArrayList files = new ArrayList();
...
String fileName = (String) files.get(0);

由于沒有錯(cuò)誤檢查,可以插入任意類型的對象。

files.add(new File("..."));

對于上面的操作,編譯和運(yùn)行的時(shí)候都不會(huì)出錯(cuò)。然而,當(dāng)其他地方取出該數(shù)據(jù),并試圖進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí)就會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

ArrayList files = new ArrayList();
//不報(bào)錯(cuò)
files.add(new File("..."));
//報(bào)錯(cuò)
String fileName = (String) files.get(0);

對于上面提到的兩個(gè)問題,泛型提供了一個(gè)很好的解決方案:類型參數(shù)(type parameters)。在ArrayList類中使用一個(gè)類型參數(shù)來指示元素的類型:

public class ArrayList<E>{
  private Object[] elementData;
  ...
  public E get(int i){...}
  public void add(E o){...}
}

ArrayList<String> files = new ArrayList<>();

這使得代碼具有更好的可讀性,人們一看就能知道這個(gè)數(shù)組列表中包含的是String對象。

同時(shí),編譯器也可以很好的利用這個(gè)信息。當(dāng)調(diào)用get方法時(shí),因?yàn)榫幾g器已經(jīng)知道返回值是String類型,所以不在需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。當(dāng)調(diào)用add方法時(shí),編譯器因?yàn)橹繿dd方法的參數(shù)是String類型,可以對add方法的使用進(jìn)行檢查,避免調(diào)用者傳入錯(cuò)誤類型的參數(shù)。

在編譯時(shí)就發(fā)現(xiàn)錯(cuò)誤比運(yùn)行時(shí)才發(fā)現(xiàn)錯(cuò)誤要好得多*,類型參數(shù)的魅力在于:使得程序具有更好的可讀性和安全性。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JVM內(nèi)置函數(shù)Intrinsics介紹

    JVM內(nèi)置函數(shù)Intrinsics介紹

    這篇文章主要介紹了JVM內(nèi)置函數(shù)Intrinsics,我們將學(xué)習(xí)什么是intrinsics(內(nèi)部/內(nèi)置函數(shù)),以及它們?nèi)绾卧贘ava和其他基于JVM的語言中工作,需要的朋友可以參考一下
    2022-02-02
  • SpringBoot實(shí)現(xiàn)向量數(shù)據(jù)庫優(yōu)化檢索的方案及示例

    SpringBoot實(shí)現(xiàn)向量數(shù)據(jù)庫優(yōu)化檢索的方案及示例

    在Spring?Boot中實(shí)現(xiàn)RAG(Retrieval-Augmented?Generation)的增強(qiáng),可以從檢索優(yōu)化、生成優(yōu)化和系統(tǒng)架構(gòu)三個(gè)維度進(jìn)行改進(jìn),本文給大家介紹了具體實(shí)現(xiàn)方案及示例,需要的朋友可以參考下
    2025-02-02
  • java中的Io(input與output)操作總結(jié)(四)

    java中的Io(input與output)操作總結(jié)(四)

    前面已經(jīng)把java io的主要操作講完了,這一節(jié)我們來說說關(guān)于java io的其他內(nèi)容:Serializable序列化/DataOutputStream和DataInputStream類/管道流等等,感興趣的朋友可以了解下
    2013-01-01
  • 通過Session案例分析一次性驗(yàn)證碼登錄

    通過Session案例分析一次性驗(yàn)證碼登錄

    這篇文章主要介紹了通過Session案例分析一次性驗(yàn)證碼登錄,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • Java虛擬機(jī)之類加載

    Java虛擬機(jī)之類加載

    這篇文章主要介紹了Java虛擬機(jī)之類加載,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java高級(jí)用法中的JNA類型映射注意細(xì)節(jié)及使用問題

    Java高級(jí)用法中的JNA類型映射注意細(xì)節(jié)及使用問題

    本文介紹了在使用JNA方法映射中應(yīng)該注意的一些細(xì)節(jié)和具體的使用問題,對java??JNA類型映射注意細(xì)節(jié)感興趣的朋友一起看看吧
    2022-04-04
  • 使用mybatis-plus分頁出現(xiàn)兩個(gè)Limit的問題解決

    使用mybatis-plus分頁出現(xiàn)兩個(gè)Limit的問題解決

    在使用MyBatis-Plus進(jìn)行分頁查詢時(shí),可能會(huì)遇到查詢SQL中出現(xiàn)兩個(gè)limit語句的問題,這通常是由于在多個(gè)模塊中重復(fù)引入了MyBatis-Plus的分頁插件所導(dǎo)致的,下面就來介紹一下如何解決,感興趣的可以了解一下
    2024-10-10
  • Java讀取properties配置文件的8種方式匯總

    Java讀取properties配置文件的8種方式匯總

    讀取.properties配置文件在實(shí)際的開發(fā)中使用的很多,總結(jié)了一下,下面這篇文章主要給大家介紹了關(guān)于Java讀取properties配置文件的8種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Nacos1.4.0 Windows10單機(jī)模式啟動(dòng)和集群啟動(dòng)過程解析

    Nacos1.4.0 Windows10單機(jī)模式啟動(dòng)和集群啟動(dòng)過程解析

    這篇文章主要介紹了Nacos1.4.0 Windows10單機(jī)模式啟動(dòng)和集群啟動(dòng),第一次使用nacos,廢話不多說,記錄下自己啟動(dòng)Nacos遇到的坑,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Spring應(yīng)用中使用acutator/refresh刷新屬性不生效的問題分析及解決

    Spring應(yīng)用中使用acutator/refresh刷新屬性不生效的問題分析及解決

    在Spring應(yīng)用收到/actuator/refresh的POST請求后,標(biāo)注了@RefreshScope以及@ConfiguratioinProperties的bean會(huì)被Spring容器重新加載,但是,在實(shí)際應(yīng)用中,并沒有按照預(yù)期被Spring容器加載,本文將討論導(dǎo)致這種未按預(yù)期刷新的一種原因,感興趣的朋友可以參考下
    2024-01-01

最新評論

镇远县| 漳浦县| 桐乡市| 庆阳市| 杂多县| 六枝特区| 高淳县| 湖州市| 东乡县| 信阳市| 巴中市| 六枝特区| 驻马店市| 高雄县| 广州市| 日照市| 新沂市| 平泉县| 张家口市| 汪清县| 进贤县| 玛沁县| 淄博市| 阿城市| 类乌齐县| 驻马店市| 中西区| 伽师县| 阜阳市| 汝城县| 称多县| 临江市| 庆云县| 姚安县| 二连浩特市| 靖江市| 团风县| 巧家县| 正定县| 托克托县| 洪湖市|