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