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