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