SonarQube:不应使用幻数(鱿鱼:S109)

时间:2019-02-06 16:15:59

标签: java sonarqube magic-numbers

根据定义

  

“幻数”是一个应赋予符号名称的值,但   而是作为字面量滑入了代码中,通常超过   一个地方。

这是一个神奇数字的完美例子

    for(int i = 0; i < 4; i++){       // Noncompliant, 4 is a magic number
        ...

,应更改为有意义的

    for(int i = 0; i < NUMBER_OF_CYCLES ; i++){
        ...

但是Sonar也会为indexNumbers引发错误。 例如,我有一个DAO类,其中insert语句具有将近50多个列,声纳引发

的错误
ps.setString(1 ,...)

我相信这比

更具可读性
ps.setString(INDEX_ONE ,...)

我的理解有什么错误吗?还是Sonar中的错误?

1 个答案:

答案 0 :(得分:1)

从技术上和事实上讲,这都不是错误:规则发现代码使用任意数字。

但是,我认为有理由认为这种非常特殊的用例具有固定的列号索引,应该被认为是误报。实际上,我认为尝试“修复”代码毫无意义。因此,我的建议是在SonarQube中将这些单个问题标记为False positiveWon't fix,或者从分析您的DAO类中排除该规则。