2014-02-06 60 views
0

我正在編寫一系列我們的API的客戶端庫供第三方庫使用。創建庫時捕捉幷包裝運行時異常?

有底層的http客戶端,我們只使用拋出RuntimeExceptions。我不想讓這些異常冒泡,而是將它們包裝在我們自己的ClientException中。

然而,我讀的一切似乎表明,捕捉運行時異常真的是不好的做法?

編寫庫供第三方使用時,這是規則的例外嗎?

+0

它是字面上的'RuntimeException'還是特定的子類型?如果是後者,那麼就沒有這樣的*最佳做法*,它會讓你不去捕捉它。例如,Spring和Hibernate只會拋出未經檢查的異常,並將其作爲一個*特性*並作爲最佳實踐遵循。 –

+0

是的是子類型,只是一個未經檢查的異常。 –

+0

「你所讀的一切」並不總是針對你的具體情況(並且要小心,因爲在很多情況下,尤其是在互聯網上,每個人都可以假裝他們的意見是可信的參考資料來源,「你讀的所有內容」只包含多個基於同一根誤解/錯誤信息的陳述);做什麼對你的場景最有意義,並導致最乾淨和最直接的代碼(和一個簡單的API)。如果您覺得自己正在做某些事情需要進一步解釋,請將其記錄清楚。 –

回答

2

沒有什麼錯抓一個未經檢查的異常,特別是包裝和重新拋出的目的。

爲建議不趕unchecked異常可能適用的唯一情況是寫像

try { ... } 
catch (RuntimeException e) { ... do some handling and move on ... } 

,因爲這將阻止任何NullPointerException S,IllegalArgumentException S等從打破了執行流程。這些例外都是非常通用的,不能自動從(可能出現在太多地方,出於太多不同原因)恢復,並且通常指示編程錯誤如果代碼沒有在它們上打破,那麼將更難以查明。