最佳新秀Java(22)——再次了解泛型
仿制藥Java SE 1.5新功能。通用自然是參數(shù)化類型。即操作數(shù)據(jù)類型被指定為一個參數(shù)。這樣的參數(shù)類型可以在課堂上使用、創(chuàng)建的接口和方法,他們被稱為通用類、、泛型方法。
Java語言引入泛型的優(yōu)點是安全簡單。
規(guī)則和限制
1、泛型的類型參數(shù)僅僅能是類類型(包含自己定義類),不能是簡單類型。
2、同一種泛型能夠相應多個版本號(由于參數(shù)類型是不確定的),不同版本號的泛型類實例是不兼容的。
3、泛型的類型參數(shù)能夠有多個。
4、泛型的參數(shù)類型能夠使用extends語句。比如<T extends superclass>。習慣上稱為“有界類型”。
5、泛型的參數(shù)類型還能夠是通配符類型。
比如Class<?> classType = Class.forName("java.lang.String")。
限制泛型
我們通常是這樣定義泛型的:class Generics<T>。實際上這里的限定類型相當于Object,這和“Object泛型”實質(zhì)是一樣的。什么是限制比方我們要限制T為集合接口類型。
僅僅須要這么做:class Generics<T extends Collection>。這樣類中的泛型T僅僅能是Collection接口的實現(xiàn)類,傳入非Collection接口編譯會出錯。
注意:<T extends Collection>這里的限定使用keywordextends。后面能夠是類也能夠是接口。但這里的extends已經(jīng)不是繼承的含義了。應該理解為T類型是實現(xiàn)Collection接口的類型。或者T是繼承了XX類的類型。
上面的代碼是能夠編譯通過并成功執(zhí)行的。可是打開凝視掉的兩行就出錯了。由于<T extends Collection>這么定義類型的時候。就限定了構(gòu)造此類實例的時候T是確定的一個類型。這個類型實現(xiàn)了Collection接口。簡單一句話就是:上面這樣的方式。定義跟實例化的類型必須全然一致。
通配符泛型
為了解決類型被限制死了不能動態(tài)依據(jù)實例來確定的缺點,引入了“通配符泛型”。針對上面的樣例,使用通配泛型格式為<? extends Collection>,“?”代表未知類型,這個類型是實現(xiàn)Collection接口。那么上面實現(xiàn)的方式能夠?qū)憺?#xff1a;
1、假設(shè)僅僅指定了<?
>,而沒有extends,則默認是同意Object及其下的不論什么Java類了。也就是隨意類。
2、通配符泛型不單能夠向下限制。如<? extends Collection>,還能夠向上限制,如<? super Double>,表示類型僅僅能接受Double及其上層父類類型,如Number、Object類型的實例。
3、泛型類定義能夠有多個泛型參數(shù)。中間用逗號隔開,還能夠定義泛型接口。泛型方法。
這些都與泛型類中泛型的使用規(guī)則相似。
多接口限制
盡管Java泛型簡單的用 extends 統(tǒng)一的表示了原有的 extends 和 implements 的概念,但仍要遵循應用的體系,Java 僅僅能繼承一個類,但能夠?qū)崿F(xiàn)多個接口,所以你的某個類型須要用 extends 限定,且有多種類型的時候。僅僅能存在一個是類。而且類寫在第一位,接口列在后面。也就是:<T extends SomeClass & interface1 & interface2 & interface3>
這里的樣例僅演示了泛型方法的類型限定,對于泛型類中類型參數(shù)的限制用全然一樣的規(guī)則,僅僅是加在類聲明的頭部,如:
最后,強調(diào)一點,是最關(guān)鍵的數(shù)據(jù)是提高通用代碼的安全性,由于它的編譯能力檢查代碼,從而避免異常非常強的依次類型的實現(xiàn)發(fā)生。
了解仿制藥的目的,我相信你會知道如何使用它泛型!
?? ?
轉(zhuǎn)載于:https://www.cnblogs.com/mengfanrong/p/4576821.html
總結(jié)
以上是生活随笔為你收集整理的最佳新秀Java(22)——再次了解泛型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保存现场数据和状态:onSaveInst
- 下一篇: Convolutional Neural