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

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

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

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

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

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

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

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

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

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

使用這種ArrayList類存在兩個問題:

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

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

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

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

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

ArrayList files = new ArrayList();
//不報錯
files.add(new File("..."));
//報錯
String fileName = (String) files.get(0);

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

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

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

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

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

在編譯時就發(fā)現(xiàn)錯誤比運(yùn)行時才發(fā)現(xiàn)錯誤要好得多*,類型參數(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實現(xiàn)向量數(shù)據(jù)庫優(yōu)化檢索的方案及示例

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

    在Spring?Boot中實現(xiàn)RAG(Retrieval-Augmented?Generation)的增強(qiáng),可以從檢索優(yōu)化、生成優(yōu)化和系統(tǒng)架構(gòu)三個維度進(jìn)行改進(jìn),本文給大家介紹了具體實現(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案例分析一次性驗證碼登錄

    通過Session案例分析一次性驗證碼登錄

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了Nacos1.4.0 Windows10單機(jī)模式啟動和集群啟動,第一次使用nacos,廢話不多說,記錄下自己啟動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會被Spring容器重新加載,但是,在實際應(yīng)用中,并沒有按照預(yù)期被Spring容器加載,本文將討論導(dǎo)致這種未按預(yù)期刷新的一種原因,感興趣的朋友可以參考下
    2024-01-01

最新評論

潮州市| 义乌市| 江津市| 榆林市| 舟山市| 嘉义县| 宾川县| 安福县| 清流县| 绵阳市| 夹江县| 盐池县| 米易县| 化隆| 临潭县| 公安县| 靖边县| 香河县| 铜梁县| 尼玛县| 平凉市| 寻甸| 尚义县| 阿鲁科尔沁旗| 天门市| 黔江区| 富源县| 博罗县| 崇阳县| 中宁县| 象山县| 黎川县| 阿鲁科尔沁旗| 六安市| 嘉定区| 静海县| 沾益县| 秦皇岛市| 博野县| 甘洛县| 长武县|