Java 重构方法以引发最多一个已检查异常,而不是ExecutionException和InterruptedException

Java 重构方法以引发最多一个已检查异常,而不是ExecutionException和InterruptedException,java,sonarqube,Java,Sonarqube,我有一个类似的方法 public void methodName() throws ExecutionException, InterruptedException {} SonarQube对此方法提出了一个问题,建议重构此代码 如果我将这些异常替换为Exception(它们都扩展了Exception),则表示抛出Exception过于通用 我如何解决这个问题 确切的sonarQube消息:重构此方法以引发atmost one checked异常,而不是ExecutionException、I

我有一个类似的方法

public void methodName() throws ExecutionException, InterruptedException {}
SonarQube对此方法提出了一个问题,建议重构此代码

如果我将这些异常替换为
Exception
(它们都扩展了
Exception),则表示抛出
Exception
过于通用

我如何解决这个问题

确切的sonarQube消息:重构此方法以引发atmost one checked异常,而不是ExecutionException、InterruptedException


sonarQube的详细提示:

我真的没有答案给你,但我想可能值得更深入地研究例外情况。我在docs.oracle.com上查找了以下定义:

执行例外: 尝试检索通过引发异常而中止的任务的结果时引发异常。可以使用Throwable.getCause()方法检查此异常

中断异常: 当线程正在等待、睡眠或被占用,并且线程在活动之前或期间被中断时抛出。有时,方法可能希望测试当前线程是否已中断,如果已中断,则立即抛出此异常。以下代码可用于实现此效果: if(Thread.interrupted())//清除中断状态! 抛出新的InterruptedException()

这就是说,ExecutionException的性质可能意味着我们不必担心捕获InteruptedException(因为当错误处理另一个抛出的异常时会抛出ExcepcutionException)。所以我们可以试试这样的方法:

public void methodName() throws ExecutionException {}

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用“编辑”链接改进您的问题-不要通过评论添加更多信息。谢谢您可能想添加sonarqube消息的确切细节。@GhostCat,我已经添加了sonarqube消息。您还需要其他详细信息吗?我想SonarQube为当前代码提供了更详细的提示?请看这里,在第一个答案中,所有内容都是解释: