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.TRUE
、Boolean.FALSE
和 null
的三值逻辑。
相反,我认为你应该1这样写:
public void foo(Bar bar){
if (bar.equals(somePredefinedObject) {
this.setSomeField(null);
} else {
this.setSomeField(true);
}
}
或者抑制这种特殊情况。
可以说,SonarQube 规则在这里给出了误报,尽管也可以说以这种方式实现 3 值逻辑不是一个好主意。
1 - 您可以通过使用包含对 Boolean.TRUE
的引用的变量来 欺骗 SonarQube,但这将使您的代码更难被其他人阅读。 (期待这样的评论“你为什么哎呀这样做??”)
我在方法中有以下代码片段:
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.TRUE
、Boolean.FALSE
和 null
的三值逻辑。
相反,我认为你应该1这样写:
public void foo(Bar bar){
if (bar.equals(somePredefinedObject) {
this.setSomeField(null);
} else {
this.setSomeField(true);
}
}
或者抑制这种特殊情况。
可以说,SonarQube 规则在这里给出了误报,尽管也可以说以这种方式实现 3 值逻辑不是一个好主意。
1 - 您可以通过使用包含对 Boolean.TRUE
的引用的变量来 欺骗 SonarQube,但这将使您的代码更难被其他人阅读。 (期待这样的评论“你为什么哎呀这样做??”)