《Effective Java》泛型--請(qǐng)不要在新代碼中使用原生態(tài)類型

泛型:聲明中具有一個(gè)或多個(gè)類型參數(shù)的類或者接口就是泛型

原生態(tài)類型的泛型:不帶任何實(shí)際參數(shù)的泛型名稱,例如List<E>的原生態(tài)類型就是List

使用原生態(tài)類型的安全性問(wèn)題

如果我們?cè)诼暶鞣盒偷臅r(shí)候使用了原生態(tài)類型的泛型啦桌,但是最后添加數(shù)據(jù)的時(shí)候卻添加了與初始化數(shù)據(jù)不同的類型的數(shù)據(jù)锨匆,例如這種

List  nameList = new ArrayList();
nameList.add(1);  
//然后添加
nameList.add("java");

這種錯(cuò)誤在編譯時(shí)并沒(méi)有什么問(wèn)題宰僧,但是運(yùn)行時(shí)會(huì)報(bào)錯(cuò)乐严。如上所述坛芽,如果不提供類型參數(shù),使用集合類型和其他泛型也任然是合法的七嫌,但是不應(yīng)該這么做。如果使用原生類型苞慢,就失掉了泛型在安全性和表述性方面的所有優(yōu)勢(shì)诵原。

泛型的子類化

如上所述,雖然不應(yīng)該在新代碼中使用想List這樣原生態(tài)類型,使用參數(shù)化的類型以允許插入任意對(duì)象绍赛,如List<Object> ,這還是可以的蔓纠。原生態(tài)類型List和參數(shù)化類型List<Object>之間到底有什么區(qū)別呢?

不嚴(yán)格的說(shuō)吗蚌,前者逃避了泛型的檢查腿倚,后者明確告訴編譯器,它能夠持有任意類型的對(duì)象褪测。雖然你可以將List<String>傳遞給類型List的參數(shù)猴誊,但是不能將它傳給類型List<Object>的參數(shù)。

無(wú)限制的通配符類型

有了泛型之后呢會(huì)有一種比較安全的替代方法侮措,稱作無(wú)限制的通配符類型(Unbounded wildcard type)懈叹。

如果要使用泛型,但不確定或者不關(guān)心實(shí)際的類型參數(shù)分扎,就可以使用一個(gè)問(wèn)號(hào)替代澄成。例如,泛型Set<E> 的無(wú)限制通配符類型為 Set<?>(讀作“某個(gè)類型的集合”)畏吓。這是最普通的參數(shù)化Set集合墨状,可以持有任何集合

無(wú)限制通配符類型Set<?> 和原生態(tài)類型Set的區(qū)別
這個(gè)問(wèn)號(hào)真正起到作用了嗎?這個(gè)是當(dāng)然起到作用的菲饼,因?yàn)橥ㄅ浞愋蜁r(shí)安全的肾砂,原生態(tài)類型不安全。由于可以將任何元素放進(jìn)原生態(tài)類型的集合中宏悦,因此很容易破壞改集合的類型約束條件镐确;

總之,使用原生態(tài)類型會(huì)在運(yùn)行時(shí)導(dǎo)致異常饼煞,因此不要再新代碼中使用源葫。但就有人問(wèn)既然這么不推薦使用,為什么還要存在原生態(tài)類型呢砖瞧?原生態(tài)類型只是為了與引入泛型之前的遺留代碼進(jìn)行兼容和互換而提供的息堂。讓我們做個(gè)快速的回顧:Set<Object> 是個(gè)參數(shù)化類型,所以可以包含任何對(duì)象類型的一個(gè)集合块促;Set<?> 則是一個(gè)通配符類型荣堰,表示只能包含某種位置對(duì)象類型的一個(gè)集合;Set則是原生態(tài)類型竭翠,它脫離了泛型系統(tǒng)持隧。前兩個(gè)是安全的,最后一種不安全逃片。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屡拨,一起剝皮案震驚了整個(gè)濱河市只酥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呀狼,老刑警劉巖裂允,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哥艇,居然都是意外死亡绝编,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門貌踏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)十饥,“玉大人,你說(shuō)我怎么就攤上這事祖乳《憾拢” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵眷昆,是天一觀的道長(zhǎng)蜒秤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)亚斋,這世上最難降的妖魔是什么作媚? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮帅刊,結(jié)果婚禮上纸泡,老公的妹妹穿的比我還像新娘。我一直安慰自己赖瞒,他們只是感情好女揭,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冒黑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勤哗。 梳的紋絲不亂的頭發(fā)上抡爹,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音芒划,去河邊找鬼冬竟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛民逼,可吹牛的內(nèi)容都是我干的泵殴。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼拼苍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼笑诅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吆你,失蹤者是張志新(化名)和其女友劉穎弦叶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妇多,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伤哺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了者祖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立莉。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖七问,靈堂內(nèi)的尸體忽然破棺而出蜓耻,到底是詐尸還是另有隱情,我是刑警寧澤烂瘫,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布媒熊,位于F島的核電站,受9級(jí)特大地震影響坟比,放射性物質(zhì)發(fā)生泄漏芦鳍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一葛账、第九天 我趴在偏房一處隱蔽的房頂上張望柠衅。 院中可真熱鬧,春花似錦籍琳、人聲如沸菲宴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喝峦。三九已至,卻和暖如春呜达,著一層夾襖步出監(jiān)牢的瞬間谣蠢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工查近, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眉踱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓霜威,卻偏偏與公主長(zhǎng)得像谈喳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戈泼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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