高效Java第四十一條建議:慎用重載

問題的引入

classify方法被重載了厂榛,而要調(diào)用那個重載方法是在編譯時做出決定的。

雖然for循環(huán)中的三次迭代的運行時類型是不同的樟澜,但這并不影響對重載方法的選擇瞳收。

因為該參數(shù)的編譯時類型為Collection<?>,所以,唯一合適的重載方法是第三個:classify(Collection c)猴伶。

重載與重寫的區(qū)別

對于重載方法的選擇是靜態(tài)的课舍,而對于被覆蓋的方法的選擇則是動態(tài)的塌西。

選擇被覆蓋的方法的正確版本是在運行時進行的,選擇的依據(jù)是被調(diào)用方法所在對象的運行時類型筝尾。



如何修復引入的問題

最佳修正方案是:用單個方法來替換這三個重載的classify方法捡需,并在這個方法中做一個顯式的instanceof測試:


覆蓋機制是規(guī)范,而重載機制是例外筹淫,所以覆蓋機制滿足了人們對于方法調(diào)用行為的期望站辉。

如果編寫出來的代碼的行為可能使程序員感到困惑,它就是很槽糕的實踐损姜。

應該避免胡亂地使用重載機制饰剥。

建議

安全而保守的策略是,永遠不要導出兩個具有相同參數(shù)數(shù)目的重載方法薛匪。

如果方法使用可變參數(shù)捐川,保守的策略是根本不要重載它。

始終給方法起不同的名稱逸尖,而不使用重載機制古沥。


對于每一對重載方法,至少有一個對應的參數(shù)在兩個重載方法中具有“根本不同”的類型娇跟。


如果重載方法在同樣的參數(shù)上被調(diào)用時岩齿,執(zhí)行相同的功能,重載就不會帶來危害苞俘。

確保這種行為的標準做法是盹沈,讓更具體化的重載方法把調(diào)用轉(zhuǎn)發(fā)給更一般化的重載方法。

例如String類的:





自動裝箱

在JDK5之前吃谣,所有的基本類型都根本不同于所有的引用類型乞封,但是自動裝箱改變了這種情況。


如何解決這個問題:





總結(jié)

避免:同一組參數(shù)只需經(jīng)過類型轉(zhuǎn)換就可以被傳遞給不同的重載方法岗憋。

當傳遞相同的參數(shù)時肃晚,所有重載方法的行為必須一致。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仔戈,一起剝皮案震驚了整個濱河市关串,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌监徘,老刑警劉巖晋修,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凰盔,居然都是意外死亡墓卦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門户敬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趴拧,“玉大人溅漾,你說我怎么就攤上這事山叮≈瘢” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵屁倔,是天一觀的道長脑又。 經(jīng)常有香客問我,道長锐借,這世上最難降的妖魔是什么问麸? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮钞翔,結(jié)果婚禮上严卖,老公的妹妹穿的比我還像新娘。我一直安慰自己布轿,他們只是感情好哮笆,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著汰扭,像睡著了一般稠肘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萝毛,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天项阴,我揣著相機與錄音,去河邊找鬼笆包。 笑死环揽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的庵佣。 我是一名探鬼主播歉胶,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秧了!你這毒婦竟也來了跨扮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤验毡,失蹤者是張志新(化名)和其女友劉穎衡创,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晶通,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡璃氢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狮辽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片一也。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡巢寡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椰苟,到底是詐尸還是另有隱情抑月,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布舆蝴,位于F島的核電站谦絮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洁仗。R本人自食惡果不足惜层皱,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赠潦。 院中可真熱鬧叫胖,春花似錦、人聲如沸她奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽方淤。三九已至钉赁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間携茂,已是汗流浹背你踩。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讳苦,地道東北人带膜。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像鸳谜,于是被迫代替她去往敵國和親膝藕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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