SonarQube:java构造函数枚举中是否允许使用幻数

时间:2015-06-24 07:05:21

标签: java enums sonarqube magic-numbers

关于规则鱿鱼:不应使用S109幻数

难道不允许在java的枚举构造函数中包含数字吗?在我看来,下面的代码不应该违反规则。

public enum Color{
   RED(42),
   GREEN(123456),
   BLUE(666);

   public final int code;

   Color(int colorCode){
      this.code=colorCode;
   }    
}

我正在使用Sonar java插件版本3.3

2 个答案:

答案 0 :(得分:2)

将在版本3.4中修复

在SonarSource上查看此问题:http://jira.sonarsource.com/browse/SONARJAVA-1117

答案 1 :(得分:0)

从技术上讲,是的,您的代码没有任何问题。 代码显示每个枚举类型的颜色代码基于构造函数(如红色为42)。但是,当有人试图调试代码时(特别是一大段代码),squid规则规定这可能会“混乱”。

这取自鱿鱼规则documentation

  

当你编写一段代码时,使用幻数可能看起来很明显和直截了当,但在调试时它们却不那么明显和直截了当。

     

这就是为什么必须通过在使用之前首先分配给明确命名的常量来揭开神奇数字的神秘面纱。

     

-1,0和1不被视为幻数

因此,在您的代码中,您可能希望执行类似的操作。

public enum Color{
   public final int RED_CODE = 42;
   RED(RED_CODE);

   public final int code;

   Color(int colorCode){
      this.code=colorCode;
   }    
}

或者也可以禁用规则:D