Effective Java之抛出与抽象相应的异常(六十一)
1.如何處理異常?
方法B拋出了一個(gè)受檢的異常 ,那么方法A在內(nèi)部調(diào)用方法B時(shí),面對(duì)方法B拋出的受檢異常,可以選擇繼續(xù)拋出向上傳播這個(gè)異常,也可以捕獲這個(gè)異常進(jìn)行處理。究竟是向上傳播拋出,還是捕獲處理呢?
2.處理異常方法
方法一:拋出與抽象想對(duì)應(yīng)的異常。
例如
如果方法B拋出了NoSuchElementException這個(gè)受檢異常,然而在方法A中調(diào)用方法B時(shí),根據(jù)方法A中的邏輯,當(dāng)遇到NoSuchElementException異常時(shí),拋出一個(gè)IndexsOutOfBoundsException異常更為合適。那么就不應(yīng)該選擇向上傳播拋出NoSuchElementException,而是應(yīng)該選擇捕獲NoSuchElementException,然后拋出IndexsOutOfBoundsException。
更高層的實(shí)現(xiàn)應(yīng)該捕獲底層的異常,同時(shí)拋出可以按照高層抽象進(jìn)行解釋的異常。這種做法稱(chēng)為異常轉(zhuǎn)譯(exception translation)。
方法二:避免底層異常出現(xiàn)。
處理來(lái)自底層異常的最好做法是,在調(diào)用底層方法之前確保它們會(huì)成功執(zhí)行。
還是拿上面的當(dāng)成例子,如果高層的A方法能夠通過(guò)普通的判斷語(yǔ)句保證底層的B方法永遠(yuǎn)也不會(huì)拋出異常,那么就可以不必處理B方法的異常。
方法三:繞開(kāi)底層異常。
如果無(wú)法避免低層異常,可以讓更高層來(lái)悄悄地繞開(kāi)這些異常,從而將高層方法的調(diào)用者與低層的問(wèn)題隔離開(kāi)來(lái)。使用適當(dāng)?shù)赜涗洐C(jī)制來(lái)將異常記錄下來(lái)。
對(duì)于上面的例子,如果A方法實(shí)在不能避開(kāi)B方法,那么該怎么辦呢,只需要try-catch底層的異常,然后偷偷地通過(guò)記錄機(jī)制把異常記錄下來(lái),這樣A就不用做其他異常處理了。
總結(jié)
以上是生活随笔為你收集整理的Effective Java之抛出与抽象相应的异常(六十一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Effective Java之优先使用标
- 下一篇: Effective Java之在细节消息