7

我有以下用 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。

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

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

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

4

2 回答 2

11

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

checkstyle 规则似乎被称为 MutableException 并在此处记录。

于 2013-06-21T14:15:10.600 回答
-1

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

于 2013-06-21T14:16:21.020 回答