最终字段而不是枚举中的访问器

时间:2013-02-18 12:13:04

标签: java enums sonarqube final

示例:

public enum TestEnum {
    FOO(4), BAR(7);

    public final int externalValue;

    private TestEnum(int externalValue) {
        this.externalValue = externalValue;
    }
}

注意没有getExternalValue()方法。由于externalValue字段是final,因此不存在修改它的风险。通过Sonar运行这样的代码给了我一个“变量'externalValue'必须是私有的,并且有访问器方法”错误。

假设我是一个完全白痴,并解释:为什么我绝对需要为externalValue实现和使用访问器?

很难解释原因,但Java Bean模式从一个聪明的结构变成一个普遍的法则的方式,不知何故让我感到不安。我觉得它不应该一直是必要的。

2 个答案:

答案 0 :(得分:1)

在这种情况下,声纳规则是完全错误的;枚举甚至不可能符合JavaBean规范(因为它需要公共构造函数)

这通常发生在静态代码分析器上;您可以使用// NOSONAR评论或@SuppressWarnings注释来选择性地停用某些警告。

答案 1 :(得分:0)

如果您看到官方documentation

每个实例的final变量都被声明为private,并且定义了它们的访问器。那么,可能只是必须如此?