幻数:检查幻数

时间:2013-01-18 12:42:26

标签: java

我在Sonar上发出此警告是违规行为。我想要正确的解决方案从声纳中删除此警告。

我的代码是这样的:

void method(){
try {
  int x;
  x=5;
 }
 catch{
    //handling code
 }
}

我收到了有关此代码的警告:

'5' is a magic number.

所以,我想要正确的解决方案来消除这种警告。

2 个答案:

答案 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方法。