【发布时间】:2019-12-21 06:16:37
【问题描述】:
有一条 SonarQube 规则指出“...no method throws a new checked exception.”
它给出了以下代码示例:
public void myMethod1() throws CheckedException {
...
throw new CheckedException(message); // Noncompliant
...
throw new IllegalArgumentException(message); // Compliant; IllegalArgumentException is unchecked
}
public void myMethod2() throws CheckedException { // Compliant; propagation allowed
myMethod1();
}
那么你怎么能真正抛出一个自定义的检查异常呢?
假设我捕获了一个 IOException 并执行 getMessage() 来获取 IOException 的详细消息字符串。
然后有条件检查字符串的内容以抛出更具体的自定义检查异常(扩展异常)。
我如何在不违反 SonarQubes 规则的情况下真正做到这一点,而我不是 throw new CheckedException(message); ?
这条规则是否意味着 SonarQube 永远不希望开发人员抛出新的自定义检查异常?
【问题讨论】:
-
也许,只是也许:你能做到
throw new CheckedException(cause, message)吗?也许 sonarqube 认为您捕获了异常并将其丢弃(顺便说一句:传递“原因”确实是一种很好的做法……将它们丢弃:没那么多)。 -
规则说你不应该抛出检查异常。一点也不。它只是允许你传播扔到别处的那些。
-
@GhostCat 不。这仍然会导致 SonarQube 违规。我猜这个规则只是不想让你抛出任何新的检查异常。
-
我不明白的是,打开规则后,如何抛出自定义检查异常?例如,您捕获一个通用异常,阅读异常详细信息,然后抛出一个更详细的自定义检查异常。