Java泛型知識總結(jié)

泛型
前言
在沒有泛型之前埃元,程序員必須使用Object編寫適用于多種類型的代碼氢哮。很繁瑣,也不安全默垄。

泛型的引入使Java有了一個很強(qiáng)的類型系統(tǒng),允許設(shè)計者詳細(xì)地描述變量和方法的類型要如何變化甚纲。

在普通的情況下口锭,實現(xiàn)泛型代碼很容易。在更高級的情況下介杆,我們的目標(biāo)是提供讓其他程序員可以輕松使用的類和方法鹃操,這對實現(xiàn)者來說會非常復(fù)雜。

為什么要使用泛型
用泛型編寫的代碼可以對多種不同對象的類型進(jìn)行重用春哨。

沒有泛型之前荆隘,使用Object(繼承)實現(xiàn)不同類型對象間的匹配。這種方法有兩個弊端

獲取一個值時必須進(jìn)行強(qiáng)制轉(zhuǎn)換(繁瑣)
編譯期沒有錯誤檢查(不安全)
因此赴背,泛型提供了一種解決方案:類型參數(shù)(type parameter)椰拒。
使代碼更具有可讀性。

編譯器也可以充分利用這個類型信息凰荚。調(diào)用get的時候不需要強(qiáng)制轉(zhuǎn)換燃观。編譯器還知道add方法有一個類型為String的類型參數(shù),這比Object類型要安全”闵現(xiàn)在缆毁,編譯器可以檢查,防止你插入錯誤類型的對象到涂。編譯期出現(xiàn)錯誤比運行期出現(xiàn)類的強(qiáng)制轉(zhuǎn)換異常要好的多脊框。

泛型類
有一個或多個類型變量的類颁督。

例如:定義一個類型變量T,用 <> 括起來浇雹,放在類名后邊适篙。泛型類還可以有多個類型變量,<T, U>箫爷。

變量類型可以應(yīng)用于方法的返回值類型以及字段和局部變量嚷节。

使用具體的類型替換類型變量來實例化反省類型,可以把結(jié)果想像成一個普通類虎锚。

泛型方法
泛型方法可以定義在普通類中硫痰,也可以定義在泛型類中。

注意窜护,泛型變量要放在方法返回值前效斑。

調(diào)用泛型方法的方式(例子是調(diào)用靜態(tài)方法):
ArrAlg.<String>getMiddle(); 注意調(diào)用格式
ArrAlg.getMiddle(); 簡單調(diào)用
類型變量的限定
場景:某個方法參數(shù)為泛型T,在方法體中要調(diào)用compareTo方法來比較大小柱徙,既然使用了泛型缓屠,說明該方法可以傳入任何參數(shù)對象,那么如何知道T所屬的類有一個compareTo方法呢护侮?

解決這個問題的方法就是限制T只能是實現(xiàn)了Comparable接口的類敌完。可以通過對變量類型T設(shè)置一個限定來實現(xiàn)這一點: public static <T extends Comparable> T min(T[] t)

此時羊初,在調(diào)用泛型方法min時只能傳遞實現(xiàn)了Comparable接口的類型對象的參數(shù)滨溉。

語法就是: <T extends BoundingType> ,T和限定類可以是類也可以是接口长赞。

一個類型變量或通配符可以有多個限定:

類型變量用 逗號 分隔
<T, U extends Comparable>
限定類型用 & 分隔
<T extends Comparable & Serializable>
注意:可以限定多個接口晦攒,類最多只能限定一個。如果有一個類作為限定得哆,這個類必須是第一個限定脯颜。

泛型代碼和虛擬機(jī)
無論何時定義一個泛型,都會自動提供一個原始類型(raw type)贩据。這個原始類型就是去掉類型參數(shù)后的泛型類型名栋操。對于無限定的變量替換為Object。

原始類型第一個限定類型來替換類型變量乐设,如果沒有給定限定讼庇,則替換為Object。例如:

public class Interval<T extends Comparable & Serializable> {
private T lower;
}
// Comparable為第一個限定類型近尚,所以使用它來替換
public class Interval {
private Comparable lower;
}
泛型轉(zhuǎn)換的步驟
對原始方法Pair.getFirst調(diào)用返回Object類型
將返回的Object類型轉(zhuǎn)換為Employee類型
泛型轉(zhuǎn)換規(guī)則
虛擬機(jī)中沒有泛型蠕啄,只有普通的類和方法
所有的類型參數(shù)都會替換為他們的限定類型
會合成橋方法來保持多態(tài)
為保持類的安全性,必要時會插入強(qiáng)制類型轉(zhuǎn)換
@SuppressWarnings("unchecked")
這個注解會關(guān)閉代碼檢查

泛型的限制與局限性
泛型不能使用基本數(shù)據(jù)類型
類型比較只適用于原始類型
不能創(chuàng)建泛型數(shù)組
通配符
泛型通配符搭配集合使用一般在方法的參數(shù)中比較常見

方法中的參數(shù)是一個集合,集合如果攜帶了通配符,要特別注意如下:

1 集合的類型會提升為Object類型歼跟。

2 方法中的參數(shù)是一個集合,集合如果攜帶了通配符,那么此集合不能進(jìn)行添加和修改操作 , 可以刪除和獲取

在集合中泛型是不支持多態(tài)的和媳,如果為了匹配任意類型,我們就會使用泛型通配符了哈街。

<?> 可以表示任意類型

受限通配符
對泛型做約束留瞳,給泛型指定類型時,只能是某個類的父類或子類骚秦。

下限
? super 類型
上限
? extends 類型
visualgo.net

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末她倘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子作箍,更是在濱河造成了極大的恐慌硬梁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胞得,死亡現(xiàn)場離奇詭異荧止,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阶剑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門跃巡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牧愁,你說我怎么就攤上這事素邪。” “怎么了递宅?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵娘香,是天一觀的道長。 經(jīng)常有香客問我办龄,道長,這世上最難降的妖魔是什么淋昭? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任俐填,我火速辦了婚禮,結(jié)果婚禮上翔忽,老公的妹妹穿的比我還像新娘英融。我一直安慰自己,他們只是感情好歇式,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布驶悟。 她就那樣靜靜地躺著,像睡著了一般材失。 火紅的嫁衣襯著肌膚如雪痕鳍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音笼呆,去河邊找鬼熊响。 笑死,一個胖子當(dāng)著我的面吹牛诗赌,可吹牛的內(nèi)容都是我干的汗茄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铭若,長吁一口氣:“原來是場噩夢啊……” “哼洪碳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叼屠,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤偶宫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后环鲤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纯趋,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年冷离,在試婚紗的時候發(fā)現(xiàn)自己被綠了吵冒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡西剥,死狀恐怖痹栖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞭空,我是刑警寧澤揪阿,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站咆畏,受9級特大地震影響南捂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旧找,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一溺健、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钮蛛,春花似錦鞭缭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甸饱,卻和暖如春沦童,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工搞动, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留躏精,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓鹦肿,卻偏偏與公主長得像站蝠,于是被迫代替她去往敵國和親牺丙。 傳聞我的和親對象是個殘疾皇子煤伟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容