【发布时间】:2015-01-28 08:01:37
【问题描述】:
我使用 SonarQube 来提高代码质量。我遇到了一个与异常处理相关的问题,即从 finally 块中删除 throw 子句。
} catch(Exception e) {
throw new MyException("request failed : ", e);
} finally {
try {
httpClient.close();
} catch (IOException e) {
throw new MyException("failed to close server conn: ", e);
}
}
根据我的理解,上面的代码看起来不错。如果我在 finally 中删除 throw 子句并抑制异常,则此方法的调用者将无法知道服务器的状态。我不确定我们如何在没有 throw 子句的情况下实现相同的功能。
【问题讨论】:
-
您是否尝试在内部
try-catch块中添加finally块并查看它是否仍然发出警告? -
如果您已经在使用 throw 子句来指示同一函数中的其他错误,那么在这种特殊情况下使用不同的方法可能是不明智的?
-
哦,我想你很担心,因为即使从未成功建立连接,你的
finally块仍然会抛出你的MyException,对吗? -
@MarkoTopolnik,想提供一个描述什么是“try-with-resources 块”的链接吗?
-
@SebastianTroy 是的,你是对的。
标签: java