2017-07-19 45 views
2

我使用SonarQube來提高編碼質量,但是我在這裏遇到了一個我不知道最佳解決方案的錯誤。與「拋出」相關的聲納問題的最佳解決方案

我稱之爲Spring的方法具有以下簽名:

T read() throws Exception, UnexpectedInputException, ParseException, 
NonTransientResourceException; 

正如我只需要調用這個方法,我沒有用心對待任何錯誤,我定義我的方法是這樣的:

ItemTransacaoEnvioVO read() throws 
UnexpectedInputException, ParseException, NonTransientResourceException, 
Exception 

但我得到這個錯誤聲納:

Remove the declaration of thrown exception 
'org.springframework.batch.item.ParseException' which is a subclass of 
'java.lang.Exception' 
... 
etc 

然後我變了樣聲納想:

ItemTransacaoEnvioVO read() throws Exception 

而且我得到這個:

Define and throw a dedicated exception instead of using a generic one. 

中的最佳實踐的思考和編碼質量會是什麼這個問題的最佳解決方案?

Java 8,Sonar

+0

請編輯您的問題以包含SonarJava的版本(可在更新中心找到:**管理>系統>更新中心**) –

回答

0

不要拋出一般異常。你應該繼承Exception,然後拋出你的子類,以便異常的類型實際上提供了有關正在發生的事情的信息,從而允許函數的客戶端適當地捕獲和處理它。

+0

唯一的一點是Spring引發了這些異常。所以通用的來自Spring。 –

1

如果您打算處理ExceptionUnexpectedInputExceptionParseExceptionNonTransientResourceException, 或者如果你想讓你的自定義類的用戶處理這些異常, 那麼問題是可以接受的,可以將其標記假陽性或會不會修復你的SonarQube。

但是,您或您的自定義類的用戶不太可能有興趣分別處理所有這些低級別例外情況。 如果是這樣的話, 那麼定義您的自定義例外 並將其拋出將是有意義的。 捕捉Spring的所有異常,並將它們保存在自定義異常中,以防有人想要查看原因。

+0

這裏唯一的一點是Spring拋出了太多的例外。不是我。 –

+0

@SérgioCamposdaFonseca好點。我重寫了我的答案。 – janos