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

标签 java enums sonarqube final

示例:

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

    public final int externalValue;

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

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

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

很难解释为什么,但 Java Bean 模式从一个聪明的构造变成一个普遍法则的方式,在某种程度上让我感到不安。我只是觉得不必总是有必要。

最佳答案

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

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

关于java - 最终字段而不是枚举中的访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14936037/

相关文章:

code-coverage - 使用 Jenkins Sonar 插件成功构建后,Sonar 不显示代码覆盖率

c# - SonarQube 未更新报告 - "Line 5 is out of range for file Program.cs. File has 4 lines"

java - Jenkins:作业页面的侧栏中缺少 SonarQube 链接

java - 如何用Java同时从多个移动传感器收集数据?

java - 从 war 中外部化应用程序上下文和 hibernate.properties

java - 以 HH :MM (Not time) 的形式存储数值

c# - C#中的抽象枚举

java - 从 Eclipse 部署 WebLogic 应用程序时出现 NoClassDefFoundError

c# - 枚举 EF 5.0 - 数据库优先

java - 如何从 Java 中的常量向注解提供枚举值