Android基礎(chǔ)進(jìn)階之EffectiveJava翻譯系列(第四章:泛型)

4. 泛型

在JDK1.5中加入了泛型,類型不正確將在編譯期間知道,而不是在運行時導(dǎo)致異常錯誤

Item23 不要使用原始類型

例如當(dāng)使用到集合的時候

//bad
private final Collection stamps = ... ;

//good
private final Collection<String> stamps = ... ;

泛型保證數(shù)據(jù)的安全性

Item24 清除未經(jīng)檢查的異常

在Eclipse或者Android studio中,敲寫的代碼或多或少有一些紅色或黃色的警告,盡可能的消除這些警告

無法避免的話而且確保代碼無誤的話,慎重使用 @SuppressWarnings("unchecked")注解

Item25 集合和數(shù)組傾向集合

數(shù)組存儲類型較靈活,將會導(dǎo)致不可預(yù)期的運行時異常
盡量讓錯誤在編譯時暴露而不是在不可控的運行時

Item26 泛型類

Item27 泛型方法

Item28 使用有界通配符增加API的靈活性

List<String>不是List<Object>的子類型,這個是有意義的
你給List<Object>中放入任何對象,但是List<String>中只能存放String
但有時我們不想存放固定的類型,因此需要一些靈活性

public class Stack<E> {
    public Stack();
    public void push(E e);
    public E pop();
    public boolean isEmpty();
}
//push所有元素
public void pushAll(Iterable<E> src) {
    for (E e : src)
    push(e);
}

//使用
Stack<Number> numberStack = new Stack<Number>();
Iterable<Integer> integers = ... ;
numberStack.pushAll(integers);

上述代碼編譯正常,看著也沒什么問題 然而當(dāng)我們添加的src不是我們期望的類型呢 如Stack<Number>,我們添加push(int) int將被自動裝箱成Integer Integer也是Number的子類型
然而

//error
pushAll(Iterable<Number>) in Stack<Number>
cannot be applied to (Iterable<Integer>)
numberStack.pushAll(integers);

幸運的是Java提供了一種機(jī)制來解決子類的問題

// Wildcard type for parameter that serves as an E producer
public void pushAll(Iterable<? extends E> src) {
  for (E e : src)
  push(e);
}

經(jīng)典原則:PECS stands for producer-extends, consumer-super.

Item29 多參數(shù)的泛型安全


上一章:類和接口
下一章:枚舉和注解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掷伙,一起剝皮案震驚了整個濱河市杉适,隨后出現(xiàn)的幾起案子峦睡,更是在濱河造成了極大的恐慌躁倒,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衍菱,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)职抡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來误甚,“玉大人缚甩,你說我怎么就攤上這事∫ぐ睿” “怎么了擅威?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奕翔。 經(jīng)常有香客問我裕寨,道長,這世上最難降的妖魔是什么派继? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任宾袜,我火速辦了婚禮,結(jié)果婚禮上驾窟,老公的妹妹穿的比我還像新娘庆猫。我一直安慰自己,他們只是感情好绅络,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布月培。 她就那樣靜靜地躺著,像睡著了一般恩急。 火紅的嫁衣襯著肌膚如雪杉畜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天衷恭,我揣著相機(jī)與錄音此叠,去河邊找鬼。 笑死随珠,一個胖子當(dāng)著我的面吹牛灭袁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窗看,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼茸歧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了显沈?” 一聲冷哼從身側(cè)響起软瞎,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铜涉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體智玻,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年芙代,在試婚紗的時候發(fā)現(xiàn)自己被綠了吊奢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡纹烹,死狀恐怖页滚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铺呵,我是刑警寧澤裹驰,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站片挂,受9級特大地震影響幻林,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜音念,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一沪饺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闷愤,春花似錦整葡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旬渠,卻和暖如春俱萍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背告丢。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工鼠次, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芋齿。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像成翩,于是被迫代替她去往敵國和親觅捆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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