泛型
在任何重要的軟件項目中,bug都是不可避免的,仔細(xì)的規(guī)劃、編程和測試可以幫助減少它們的普遍性,但是它們總會在某個地方以某種方式潛入你的代碼,隨著新功能的引入以及你的代碼庫在規(guī)模和復(fù)雜性方面的增長,這一點變得尤為明顯。
幸運(yùn)的是,一些錯誤比其他錯誤更容易被發(fā)現(xiàn),例如,編譯時錯誤可以在早期檢測到,你可以使用編譯器的錯誤消息來確定問題所在并立即修復(fù)它。但是,運(yùn)行時錯誤可能會更成問題,它們并不總是立刻浮出水面,當(dāng)它們出現(xiàn)時,它可能在程序中的某個點上,與問題的實際原因相去甚遠(yuǎn)。
泛型通過在編譯時檢測到更多錯誤來增加代碼的穩(wěn)定性。
為什么要使用泛型?簡而言之,泛型使類型(類和接口)在定義類、接口和方法時成為參數(shù),與方法聲明中使用的更熟悉的形式參數(shù)非常相似,類型參數(shù)提供了一種使你可以使用不同的輸入重用相同的代碼的方法,不同之處在于形式參數(shù)的輸入是值,而類型參數(shù)的輸入是類型。
使用泛型的代碼比非泛型代碼有許多好處:
在編譯時進(jìn)行更強(qiáng)大的類型檢查。
Java編譯器對泛型代碼應(yīng)用強(qiáng)類型檢查,并在代碼違反類型安全時發(fā)出錯誤,修復(fù)編譯時錯誤比修復(fù)運(yùn)行時錯誤更容易,這很難找到。
消除數(shù)據(jù)類型轉(zhuǎn)換
以下沒有泛型的代碼片段需要強(qiáng)制轉(zhuǎn)換:
List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0);
當(dāng)重寫為使用泛型時,代碼不需要強(qiáng)制轉(zhuǎn)換:
Listlist = new ArrayList (); list.add("hello"); String s = list.get(0); // no cast
使程序員能夠?qū)崿F(xiàn)通用算法。
通過使用泛型,程序員可以實現(xiàn)通用算法,這些算法可以處理不同類型的集合,可以自定義,并且類型安全且易于閱讀。
上一篇:自動裝箱和拆箱 下一篇:泛型類型文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72928.html
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語言創(chuàng)建應(yīng)用程序的程序員的實用指南,其中包括數(shù)百個完整的工作示例和數(shù)十個課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...
泛型類型 泛型類型是通過類型參數(shù)化的泛型類或接口,修改以下Box類以演示此概念。 一個簡單的Box類 首先檢查一個對任何類型的對象進(jìn)行操作的非泛型Box類,它只需要提供兩個方法:set,它將一個對象添加到box中,get,它將檢索它: public class Box { private Object object; public void set(Object object) ...
類型推斷 類型推斷是Java編譯器查看每個方法調(diào)用和相應(yīng)聲明的能力,以確定使調(diào)用適用的類型參數(shù),推理算法確定參數(shù)的類型,如果可用,還確定分配或返回結(jié)果的類型,最后,推理算法嘗試查找適用于所有參數(shù)的最具體類型。 為了說明最后一點,在下面的示例中,推斷確定傳遞給pick方法的第二個參數(shù)是Serializable類型: static T pick(T a1, T a2) { return a2; } ...
泛型原始類型 原始類型是沒有任何類型參數(shù)的泛型類或接口的名稱,例如,給定Box泛型類: public class Box { public void set(T t) { /* ... */ } // ... } 要創(chuàng)建參數(shù)化類型的Box,請為形式類型參數(shù)T提供實際類型參數(shù): Box intBox = new Box(); 如果省略實際的類型參數(shù),則創(chuàng)建一個原始類型Box: Box...
泛型的限制 要有效地使用Java泛型,必須考慮以下限制: 無法使用基元類型實例化泛型類型 無法創(chuàng)建類型參數(shù)的實例 無法聲明類型為類型參數(shù)的靜態(tài)字段 無法對參數(shù)化類型使用強(qiáng)制類型轉(zhuǎn)換或instanceof 無法創(chuàng)建參數(shù)化類型的數(shù)組 無法創(chuàng)建、捕獲或拋出參數(shù)化類型的對象 無法重載將每個重載的形式參數(shù)類型擦除為相同原始類型的方法 無法使用基元類型實例化泛型類型 考慮以下參數(shù)化類型: class P...
閱讀 2536·2023-04-25 14:54
閱讀 609·2021-11-24 09:39
閱讀 1819·2021-10-26 09:51
閱讀 3867·2021-08-21 14:10
閱讀 3494·2021-08-19 11:13
閱讀 2700·2019-08-30 14:23
閱讀 1817·2019-08-29 16:28
閱讀 3364·2019-08-23 13:45