前言:在任何一個(gè)非凡的軟件項(xiàng)目中湖笨,Bug存在于整個(gè)軟件的生命周期中迅栅,這是不爭(zhēng)的事實(shí)小泉。小心地計(jì)劃订雾、編寫(xiě)代碼和測(cè)試有助于幫你減少Bug肢预,但這些Bug總是可以找到一種方式爬進(jìn)你的代碼。當(dāng)你增加新特性和代碼越來(lái)越大洼哎,越來(lái)越復(fù)雜的時(shí)候烫映,這一情況將更加明顯。
幸運(yùn)的是噩峦,一些Bug比起其他的一些更容易被探測(cè)到锭沟,比如編譯期Bug就可以在早期被檢查出來(lái),你可以用編譯器提供的錯(cuò)誤信息來(lái)找出并修復(fù)錯(cuò)誤识补,然而族淮,運(yùn)行期Bug更困難一些,它們并不馬上出現(xiàn)凭涂,而當(dāng)它們出現(xiàn)的時(shí)候祝辣,程序可能已經(jīng)運(yùn)行到和導(dǎo)致這個(gè)Bug相去甚遠(yuǎn)的地方了。
泛型通過(guò)更強(qiáng)的編譯期Bug檢測(cè)增加了代碼的穩(wěn)定性切油,在本節(jié)教程結(jié)束之后蝙斜,也許你想繼續(xù)跟進(jìn)Gilad Bracha的泛型教程。
為什么使用泛型澎胡?
簡(jiǎn)而言之孕荠,泛型使類(lèi)型(類(lèi)和接口)在定義類(lèi)、接口和方法時(shí)變?yōu)橐粋€(gè)參數(shù)成為可能攻谁,很像更為我們所熟悉的在方法聲明中使用參數(shù)那樣稚伍,類(lèi)型參數(shù)化為你提供了一種針對(duì)不同輸入可以重用同一代碼的方法,這兩者的不同點(diǎn)在于正規(guī)參數(shù)的輸入是值巢株,而類(lèi)型參數(shù)的輸入是類(lèi)型槐瑞。
使用泛型的代碼比起不使用泛型的代碼有很多便利之處:
1.更強(qiáng)的編譯期類(lèi)型檢查。Java編譯器對(duì)泛型代碼使用強(qiáng)類(lèi)型檢查阁苞,如果代碼有違類(lèi)型安全會(huì)提示錯(cuò)誤困檩。修復(fù)編譯期錯(cuò)誤比起修復(fù)運(yùn)行期錯(cuò)誤更簡(jiǎn)單祠挫,因?yàn)楹笳吒y以被找到。
2.減少類(lèi)型強(qiáng)制轉(zhuǎn)換悼沿,下面沒(méi)有使用泛型的代碼片段需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換等舔。
List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0);
當(dāng)用泛型重寫(xiě)后,上面的代碼就不需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換了糟趾。
List list = new ArrayList();
list.add("hello");
String s = list.get(0); ? // no cast
3.使編程者可以實(shí)現(xiàn)泛型運(yùn)算
通過(guò)使用泛型慌植,編程者可以在不同類(lèi)型的集合之間實(shí)現(xiàn)泛型運(yùn)算,可以自由定制义郑,是類(lèi)型安全的并易于閱讀蝶柿。