java - 如何在不违反 SonarQube 的情况下抛出已检查的异常?

标签 java sonarqube

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 规则的情况下实现这一目标,即我不会抛出 new CheckedException(message);

这条规则是否意味着 SonarQube 永远不希望开发人员抛出新的自定义检查异常?

最佳答案

这是来自规则

The purpose of checked exceptions is to ensure that errors will be dealt with, either by propagating them or by handling them, but some believe that checked exceptions negatively impact the readability of source code, by spreading this error handling/propagation logic everywhere.

This rule verifies that no method throws a new checked exception.

这不是绝对规则。 如果您想防止人们在您的代码中抛出已检查的异常,这完全取决于您。
请记住, Sonar 规则只是规则,如果您不同意某些规则,只需禁用它们即可。 尤其是这个看起来非常基于意见。

如果您无法禁用它,请将问题解决为无法修复,并添加注释来解释您需要抛出此异常,因为架构需要如此。

我个人认为检查异常有点烦人,但我不会启用此规则,我认为它不相关。

关于java - 如何在不违反 SonarQube 的情况下抛出已检查的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57498939/

相关文章:

maven - Sonar : Multi-module analysis sonar

java - 我的 Maven 配置有什么问题?

javascript - ExtendScript(JSX) 文件的 Sonar 分析

sonarqube - Sonar 预览模式所有新问题

intellij-idea - IntelliJ IDEA 中的多模块 Gradle 支持?

java - Struts 到 servlet 或集成 struts 和 servlet

java - 使用 Apache Camel 访问 Azure 服务总线?

java - 在调用基类构造函数之前初始化成员变量

java - 明星二级Java类

java - 如何在java中同步循环,以便我可以手动增加循环值(当某些执行完成时)