【发布时间】:2013-03-21 04:21:30
【问题描述】:
考虑以下代码段...
public static UserStatus getEnum(int code) {
switch (code) {
case 0:
return PENDING;
case 1:
return ACTIVE;
case 2:
return SUSPENDED;
case 3:
return DELETED;
case 4:
return LOGIN_DISABLED;
default:
return null;
}
}
现在,SONAR 将案例(案例 3 和案例 4)中的 3 号和 4 号检测为幻数。
为避免该问题,我将代码段更改如下...
public static UserStatus getEnum(int code) {
final int Pending=0;
final int Active=1;
final int Suspended=2;
final int Deleted= 3;
final int Login_details=4;
switch (code) {
case Pending:
return PENDING;
case Active:
return ACTIVE;
case Suspended:
return SUSPENDED;
case Deleted:
return DELETED;
case Login_details:
return LOGIN_DISABLED;
default:
return null;
}
}
在这种情况下,这是解决幻数问题的好方法吗?
【问题讨论】:
-
3 和 4 被“检测为幻数”是什么意思?什么是“幻数问题”?
-
我假设您在谈论
SONAR将它们检测为Magic Numbers? -
是的,你是对的:查看其他问题以供参考:stackoverflow.com/questions/47882/…
-
更好的选择是拥有一个具有
static值的类,以便可以将经常使用的Magic数字移到那里,这样它们就可以在项目中的任何地方使用。 -
这是关于声纳的。 SONAR 将这些检测为幻数
标签: java switch-statement sonarqube magic-numbers