【问题标题】:Custom exception wrong inheritance自定义异常错误继承
【发布时间】:2015-10-14 16:59:53
【问题描述】:

我创建了扩展Exception 类的自定义基础异常。稍后我将 MyBaseException 类扩展另一个 - 这次是特定的异常类。而且我现在对 SonarQube 之一有疑问 - 具体而言,“名为“Exception”的类应扩展“Exception”或子类”规则。类声明如下所示:

import org.apache.log4j.Logger;
import org.springframework.http.HttpStatus;    
public class MyBaseException extends Exception {
    public MyBaseException(int code, String message) {
        super(message);
        this.code = code;
        LOGGER.error("Exception with HttpStatus code: " + code + " Msg: "
            + message);
    }

    public MyBaseException(HttpStatus code, String message) {
        this(code.value(), message);
    }

    public int getCode() {
        return code;
    } 
}

import org.springframework.http.HttpStatus;
public class SpecException extends MyBaseException {
    public SpecException (HttpStatus code, String message) {
        super(code, message);
    }

    public SpecException (int code, String message) {
        super(code, message);
    }
}

问题仅在于这个SpecException。 SonarQube 没有发现第一次继承有任何问题。 SonarQube 给出的提示是:“重命名此类以删除“异常”或更正其继承。”但我认为继承是正确的,因为我是通过 Exception 的子类继承的。

【问题讨论】:

  • MyBaseException 是否扩展了异常?听起来像是在抱怨。
  • 是的,它扩展了异常。此类对声纳有效。问题出在 SpecException 上。
  • 是的,如果没有展示问题的实际最小示例,就无法判断。
  • 现在应该会更好。无论如何,这就是我对这个异常问题的全部了解。
  • 您可以在 SonarQube 实例的更新中心查看 java 插件的版本。更重要的是你如何分析你的项目? maven 还是 sonar-runner ?如果是后者,您如何为分析提供字节码。如果 MyBaseException 的字节码(我想这个类没有与 SpecException 在同一个文件中定义)没有提供给分析器,那么类型层次结构没有正确解析,你会得到这个误报。

标签: java exception inheritance sonarqube


【解决方案1】:

在这个链接上,有人说 Sonar 6.0 纠正了这个问题:https://groups.google.com/forum/#!topic/sonarqube/iXxKGIYRZ1g

我刚刚意识到Sonar v6.0已经出来了,我之后问题就消失了 用新版本测试。感谢 Michael 抽出宝贵时间。

这似乎是之前版本的 Sonar 的一个错误。众所周知,Java 中的所有异常类都按照以“Exception”结尾的约定命名,并且它们可以具有多个级别,因此只要您的上层异常扩展 Exception 类,您的代码似乎就是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多