- 在編程中,我們希望寫(xiě)出一些更加泛化的代碼,通俗點(diǎn)舉例就是說(shuō),我不關(guān)心你是什么類(lèi)型,只要你能提供某種方法即可。對(duì)此,很多編程語(yǔ)言(譬如python和c++)提供了一種解決方案叫做
潛在類(lèi)型機(jī)制。 - java由于在1.5版本后才引入泛型,為了保證向上兼容,導(dǎo)致Java中的泛型并不好用。
- java的泛型是使用擦除來(lái)實(shí)現(xiàn)的,這是Java泛型實(shí)現(xiàn)的一種無(wú)奈的折中。舉個(gè)栗子,List<T>,java只是在編譯時(shí)候校驗(yàn)容器List中的數(shù)據(jù)類(lèi)型T,而在實(shí)際運(yùn)行時(shí)候會(huì)被
擦除為L(zhǎng)ist。也就是說(shuō),程序運(yùn)行時(shí),實(shí)際是一堆List、Map、Object等泛化的東西在運(yùn)行。 - 使用JDK提供的注解
@SuppressWarnings("unchecked"),忽略運(yùn)行時(shí)的一些警告??。在關(guān)閉警告時(shí)候要盡量聚焦。 - 在泛型中的所有動(dòng)作發(fā)生在
邊界(對(duì)象進(jìn)入和離開(kāi)方法的地點(diǎn))處。
使用extends設(shè)置邊界。 - 通配符?
List<? extends Fruit>意思是具有任何從Fruit繼承的類(lèi)型列表,這個(gè)類(lèi)型必須是明確的類(lèi)型,但我們?cè)谶\(yùn)行中只想知道它是List<Fruit>就行了。 -
逆變使用超類(lèi)型通配符。List<? super Apple>Apple是下界,不能向List中添加Fruit。 - 無(wú)界通配符
<?>List<?>看起來(lái)等價(jià)于List<Object>,但List實(shí)際意思是持有任何Object類(lèi)型的原生List,而List<?>實(shí)際意思是具有某種特定類(lèi)型的非原生List,只是我們不知道那種類(lèi)型是什么。 - 一個(gè)類(lèi)不能實(shí)現(xiàn)同一個(gè)泛型接口的兩種變體,由于擦除原因,這兩個(gè)變體會(huì)成為相同的接口。
- 自限定的類(lèi)型。
class SelfBounded<T extends <SelfBounded<T>>>強(qiáng)制要求將正在定義的類(lèi)當(dāng)做參數(shù)傳遞給基類(lèi)。 - 被稱(chēng)為泛型的通用語(yǔ)言特性的目的在于可表達(dá)性,而不僅僅是為了創(chuàng)建類(lèi)型安全的容器。
- java中泛型的出現(xiàn)讓數(shù)組很尷尬,我們?cè)诰幊虝r(shí)優(yōu)先選擇容器而不是數(shù)組。除了效率比容器高,數(shù)組一無(wú)是處。但如果證明出切換到數(shù)組對(duì)性能提升有幫助,還是要用數(shù)組的。譬如,對(duì)于阿里巴巴的FastJson.jar里面的JSONArray,是對(duì)json中的數(shù)組的解析,但其實(shí)也可以用List解析啊,會(huì)不會(huì)有這個(gè)原因在里面,我沒(méi)有想明白,后面再研究吧。
03.理解java中的泛型
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 前言 泛型(Generics)的型變是Java中比較難以理解和使用的部分,“神秘”的通配符,讓我看了幾遍《Java...
- [TOC] 深入理解 Java 泛型 概述 泛型的本質(zhì)是參數(shù)化類(lèi)型,通常用于輸入?yún)?shù)、存儲(chǔ)類(lèi)型不確定的場(chǎng)景。相比于...
- 程序人生的寂靜歡喜 標(biāo)題起得太大咯,是在故作老成么? “程序人生的寂靜歡喜”——怎么看都感覺(jué)像是某位已故計(jì)算機(jī)大師...