根据定义
“幻数”是一个应赋予符号名称的值,但 而是作为字面量滑入了代码中,通常超过 一个地方。
这是一个神奇数字的完美例子
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中的错误?
答案 0 :(得分:1)
从技术上和事实上讲,这都不是错误:规则发现代码使用任意数字。
但是,我认为有理由认为这种非常特殊的用例具有固定的列号索引,应该被认为是误报。实际上,我认为尝试“修复”代码毫无意义。因此,我的建议是在SonarQube中将这些单个问题标记为False positive
或Won't fix
,或者从分析您的DAO类中排除该规则。