2017-09-05 22 views
2

我有一個像重構方法拋出最多一個檢查的異常,而不是爲ExecutionException和InterruptedException的

public void methodName() throws ExecutionException, InterruptedException {} 

SonarQube這種方法提出了一個問題的方法,這表明重構的代碼。

如果我用Exception(兩者都擴展)替換這些例外,那麼它說投擲Exception太泛化。

我該如何解決這個問題?

精確sonarQube消息:重構這個方法拋出atmost一個checked異常,而不是爲ExecutionException,InterruptedException的

詳細提示通過sonarQube:https://sbforge.org/sonar/rules/show/squid:S1160?layout=false

+0

問題尋求幫助調試(「爲什麼不是這個代碼的工作?」)必須包括所期望的行爲,一個特定的問題或錯誤,並在最短的代碼要重現它在這個問題本身。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]。使用「編輯」鏈接來改善你的*問題* - 不要通過評論添加更多信息。謝謝! – GhostCat

+0

您可能想要添加該sonarqube消息的確切詳細信息。 – GhostCat

+0

@GhostCat,我添加了sonarQube消息。你需要其他細節嗎? –

回答

0

我真的沒有給你答案,但我猜例外情況可能值得深入研究。我查閱了docs.oracle.com上的以下定義:

ExecutionException: 嘗試檢索由拋出異常而中止的任務的結果時引發異常。這個異常可以使用Throwable.getCause()方法進行檢查。

InteruptedException: 在活動之前或活動期間,線程正在等待,休眠或以其他方式佔用以及線程中斷時拋出。偶爾一個方法可能希望測試當前線程是否被中斷,如果是,立即拋出這個異常。以下代碼可用於實現此效果: if(Thread.interrupted())//清除中斷狀態! throw new InterruptedException();

也就是說,也許ExecutionException的本質意味着我們不必擔心捕獲InteruptedException異常(因爲錯誤處理另一個拋出的異常時會拋出異常異常)。因此,也許我們嘗試這樣的事:

public void methodName() throws ExecutionException {} 
相關問題