我有一些關於處理Java異常的問題。我讀了一些,並得到了一些矛盾的指導方針。Java異常處理的良好做法
Best Practices for Exception Handling
讓我們通過所提到的文章:
它指出一個一般應避免使用checked異常如果「客戶端代碼無法做任何事情」。但是,這究竟意味着什麼?在GUI中顯示錯誤消息是否有足夠的理由冒泡檢查異常?但它會強制GUI程序員記住捕獲RuntimeExceptions及其後代以顯示潛在的錯誤信息。
本文中提出的第二種觀點是,除非我想在其中實施一些關聯字段/方法,否則應該避開創建自己的異常類。 我通常不同意這一點,今天我的做法恰恰相反:我在自己的異常結構中封裝了異常,以反射由我編寫的類實現的目標,即使它們只是在不添加任何新方法的情況下擴展Exception。我認爲在拋出更高層次時更靈活地處理它們對於使用這些類的程序員來說通常會更清晰和易於理解。
我在這篇文章中拋出RuntimeException的文章中提出了今天的'新方法',然後我讓Sonar對它進行分析。令我更困惑的是,Sonar將我的RuntimeExceptions標記爲主要錯誤,並帶有一條消息,如「避免拋出根類型異常,將wrap'em放入自己的類型中」。
所以它看起來很有爭議,你怎麼看?
我今天也從一位技術領導聽到,只是包裝異常是不好的,'因爲這對於JVM來說是非常昂貴的操作。對我來說,另一方面拋出的SQLExceptions或IOExceptions在任何地方看起來都有點破解封裝..
那麼你對我在這裏提出的問題的一般態度是什麼?
當包在我自己的類型的例外,當我不應該這樣做呢?
哪裏是那點「客戶端不能做的事,拋出 運行時異常?'
性能問題呢?
不幸的是,按照常見問題,這對於SO來說並不具有建設性。你可能想嘗試一下programmers.stackexchange.com - 據說,通過Joshua Bloch購買'Effective Java'。任何關於Java的人都應該擁有一份副本。 –
我肯定會將此遷移到Programmers.SE,如果可以的話。是否有一段時間我們可以做到這一點?或者我只是一直期待着那個時候? –
https://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html是一個不錯的實踐列表 – bla