重构方法最多抛出一个已检查的异常而不是ExecutionException和InterruptedException

时间:2017-09-05 10:31:23

标签: java sonarqube

我有像

这样的方法
public void methodName() throws ExecutionException, InterruptedException {}

SonarQube引发了一个关于此方法的问题,建议重构此代码。

如果我将这些例外替换为Exception(它们都扩展了),那么就说抛出Exception过于通用了。

如何解决此问题?

精确的sonarQube消息:重构此方法以抛出最多一个已检查的异常,而不是ExecutionException,InterruptedException

sonarQube的详细提示:https://sbforge.org/sonar/rules/show/squid:S1160?layout=false

1 个答案:

答案 0 :(得分:0)

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

为ExecutionException: 尝试检索通过抛出异常而中止的任务的结果时抛出异常。可以使用Throwable.getCause()方法检查此异常。

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

话虽如此,也许ExecutionException的本质意味着我们不必担心捕获InteruptedException(因为当错误处理另一个抛出的异常时抛出ExcecutionException)。所以也许我们尝试这样的事情:

public void methodName() throws ExecutionException {}