首页 > 解决方案 > SonarQube:不应使用幻数(鱿鱼:S109)

问题描述

根据定义,

“幻数”是一个应该被赋予符号名称的值,但它却作为文字滑入代码中,通常在多个地方。

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

    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 类,其中插入语句有近 50 多列,声纳会抛出错误

ps.setString(1 ,...)

我相信这比

ps.setString(INDEX_ONE ,...)

我的理解有什么问题吗?还是声纳中的错误?

标签: javasonarqubemagic-numbers

解决方案


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

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


推荐阅读