我在Sonar上发出此警告是违规行为。我想要正确的解决方案从声纳中删除此警告。
我的代码是这样的:
void method(){
try {
int x;
x=5;
}
catch{
//handling code
}
}
我收到了有关此代码的警告:
'5' is a magic number.
所以,我想要正确的解决方案来消除这种警告。
答案 0 :(得分:5)
幻数是代码中数字的直接用法(即,在您的情况下直接使用5代码中的硬编码数字)
要摆脱警告,试试这个:
int x;
static final int SOME_NUMBER=5;
x=SOME_NUMBER;
答案 1 :(得分:2)
嗯,我知道这个问题已经得到了令人满意的答案,但是我想在这里添加自己的声纳解释,因为它已经很好地阐述了:
幻数是一个无处不在的数字,而且是直接的 在声明中使用。通常使用幻数,例如 限制循环的迭代次数,以测试a的值 财产等。
使用魔术数字时,您可能会显而易见且直截了当 写一段代码,但它们不太明显 在调试时很简单。
这就是为什么魔术数字必须首先被分配才能揭开神秘面纱的原因 在使用之前明确命名变量。
-1,0和1不被视为幻数。
不符合规范的代码示例
public static void doSomething() { for(int i = 0; i < 4; i++){ // Noncompliant, 4 is a magic number ... } }
合规解决方案
public static final int NUMBER_OF_CYCLES = 4; public static void doSomething() { for(int i = 0; i < NUMBER_OF_CYCLES ; i++){ ... } }
<强>例外强>
此规则忽略hashCode方法。