【问题标题】:Checkstyle error when not declaring fields as final未将字段声明为最终字段时出现 Checkstyle 错误
【发布时间】:2013-06-21 14:02:16
【问题描述】:

我有以下用 java 编写的自定义异常:

import java.util.List;

public class PolicyException extends RuntimeException {

    private static final long serialVersionUID = -1760901980049241500L;
    private PolicyErrorCode code;
    private List<String> variables;

    public PolicyException(final PolicyErrorCode code, final List<String> variables) {
        this.code = code;
        this.variables = variables;
    }

    public PolicyErrorCode getCode() {
        return code;
    }

    public void setCode(final PolicyErrorCode code) {
        this.code = code;
    }

    public List<String> getVariables() {
        return variables;
    }

    public void setVariables(final List<String> variables) {
        this.variables = variables;
    }
}

我收到以下检查样式错误:

“代码”字段必须声明为 final。

“变量”字段必须声明为 final。

我相信抛出的 checkstyle 错误是FinalLocalVariableCheck。根据api:

确保永远不会改变其值的局部变量必须声明为 final。

但是,显然所涉及的变量有 getter 和 setter,因此不能将它们声明为 final。

这些错误不会发生在我的所有类中,只是自定义异常,由于扩展异常而可序列化。

我在这里遗漏了什么吗?或者这是一个检查样式错误?

我相信这个人也有类似的problem,尽管在他的帖子中使用静态变量似乎有点混乱。

【问题讨论】:

  • 如果您使用的是 Eclipse,您可以告诉它“在违规消息中包含规则名称”(Window --> Preferences --> Checkstyle)。其他 IDE 应该有类似的选项。这可以确定是哪个规则触发了警告。

标签: java error-handling checkstyle


【解决方案1】:

问题确实是您正在扩展Exception。有一个设计规则是异常对象应该是不可变的。所有相关的值都应该在构造函数中给出。

checkstyle 规则似乎被称为 MutableException,并记录在 here

【讨论】:

    【解决方案2】:

    可能是因为未使用的导入? 导入 javax.xml.bind.annotation.XmlRootElement;

    【讨论】:

    • 对不起,没有。我试图从文件中删除尽可能多的虚假信息,并将其留在里面。将其编辑掉。
    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2022-01-01
    • 2021-07-29
    • 2016-12-05
    相关资源
    最近更新 更多