SonarQube Java - 布尔文字不应该是多余的 - True/Null

SonarQube Java - Boolean literals should not be redundant - True/Null

我在方法中有以下代码片段:

public void foo(Bar bar){
    this.setSomeField(bar.equals(somePredefinedObject) ? null : true);
}

Sonarqube 抱怨在其中使用文字 true。 我觉得我不能那么容易地摆脱它,因为如果该表达式的计算结果为 false,我不会传入 false 而是传入 null。为了评估为 true,我传入 true。

关于如何让 sonarqube 在这里变得快乐有什么想法吗?

这是SonarQube规则RSPEC-1125

他们推荐的解决方案是改变

booleanVariable = booleanMethod() ? exp : true;

booleanVariable = !booleanMethod() || exp;

不幸的是,它不适用于涉及 Boolean.TRUEBoolean.FALSEnull 的三值逻辑。

相反,我认为你应该1这样写:

public void foo(Bar bar){
    if (bar.equals(somePredefinedObject) {
       this.setSomeField(null);
    } else {
       this.setSomeField(true);
    }
}

或者抑制这种特殊情况。

可以说,SonarQube 规则在这里给出了误报,尽管也可以说以这种方式实现 3 值逻辑不是一个好主意。


1 - 您可以通过使用包含对 Boolean.TRUE 的引用的变量来 欺骗 SonarQube,但这将使您的代码更难被其他人阅读。 (期待这样的评论“你为什么哎呀这样做??”)