0

例子:

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

    public final int externalValue;

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

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

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

很难解释为什么,但是 Java Bean 模式从一个聪明的构造变成一个普遍的规律的方式,不知何故让我心烦意乱。我只是觉得它不应该总是必要的。

4

2 回答 2

1

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

这总是发生在静态代码分析器中;您可以使用// NOSONAR注释或@SuppressWarnings注释有选择地禁用某些警告。

于 2013-02-18T12:21:31.990 回答
0

如果你看到官方文档

每个实例最终变量都被声明为私有的,并且它们的访问器被定义。那么,可能就必须如此吗?

于 2013-02-18T12:19:20.347 回答