SonarQube: разрешены ли магические числа в перечислениях конструктора java

По поводу правила squid: S109 Magic numbers не следует использовать

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

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

   public final int code;

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

Я использую плагин Sonar java версии 3.3


person DEG    schedule 24.06.2015    source источник


Ответы (2)



Технически, да, с вашим кодом все в порядке. Код показывает, что цветовой код для каждого типа перечисления основан на конструкторе (например, красный - 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

person kucing_terbang    schedule 24.06.2015
comment
Я знаю правило и согласен с ним. Поэтому я не хочу его отключать. Извлечение аргументов конструктора в константы снижает удобочитаемость кода. Тогда как правило существует только для его увеличения. Но, к счастью, это будет исправлено в версии 3.4. - person DEG; 24.06.2015