SonarQube: Должны ли магические числа быть разрешены в перечислениях Java-конструктора

Относительно правила squid: 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 ответа

Решение

Это будет исправлено в версии 3.4

Смотрите эту проблему на SonarSource: http://jira.sonarsource.com/browse/SONARJAVA-1117

Технически, да, в вашем коде нет ничего плохого. Код показывает, что код цвета для каждого типа перечисления основан на конструкторе (например, красный - 42). Но правило squid диктует, что это может "запутать", когда кто-то пытается отладить код (в частности, большой кусок кода).

Это взято из документации по правилам Squid.

Использование магических чисел может показаться очевидным и простым, когда вы пишете кусок кода, но они гораздо менее очевидны и прямолинейны во время отладки.

Вот почему магические числа должны быть демистифицированы, прежде чем они будут присвоены четко названным константам.

-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

Другие вопросы по тегам