我在方法中有以下代碼段:
public void foo(Bar bar){
this.setSomeField(bar.equals(somePredefinedObject) ? null : true);
}
Sonarqube 抱怨true在那里使用文字。我覺得我不能輕易擺脫它,因為如果該運算式的計算結果為 false,我不會傳入 false 而是傳入null.為了評估為真,我通過了 true。
關于如何讓 sonarqube 在這里快樂的任何想法?
uj5u.com熱心網友回復:
這是 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 - 您可能會通過使用包含對 的參考的變數來欺騙SonarQube Boolean.TRUE,但這會使您的代碼更難被其他人閱讀。(期待這樣的評論“為什么赫克要那么做?”)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/408246.html
標籤:
