示例:
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模式从一个聪明的结构变成一个普遍的法则的方式,不知何故让我感到不安。我觉得它不应该一直是必要的。
答案 0 :(得分:1)
在这种情况下,声纳规则是完全错误的;枚举甚至不可能符合JavaBean规范(因为它需要公共构造函数)
这通常发生在静态代码分析器上;您可以使用// NOSONAR
评论或@SuppressWarnings
注释来选择性地停用某些警告。
答案 1 :(得分:0)
如果您看到官方documentation
每个实例的final变量都被声明为private,并且定义了它们的访问器。那么,可能只是必须如此?