Yas*_*sin 2 java boolean sonarqube
如何以可读或逻辑的方式编辑此代码块,以便我不会收到来自声纳的警告?我需要三个结果false
,true
或者null
public Boolean x() {
if (...) {
return true;
} else if (...) {
return false;
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然你可以返回 null,但你不应该,至少根据squid: S2447
虽然
null
从技术上讲是一个有效值,但这一事实以及和Boolean
之间的区别很容易被忘记。因此从方法返回可能会导致调用者代码出现问题。Boolean
boolean
null
Boolean
如果您不同意,可以在本地禁用它:
return null;//NOSONAR
Run Code Online (Sandbox Code Playgroud)
或者在设置中完全停用此规则
声纳组也讨论了:
许多规则还批评了我个人认为不错的事情,即“不应从“布尔”方法返回 Null(squid:S2447)”。所以我可能无法给出好的建议。
和声纳社区问题:
我建议应该有一个额外的规则。
所以布尔值不应该这样检查:
Run Code Online (Sandbox Code Playgroud)Boolean flag = service.getFlag(); // that's the unsafe call which could cause a null pointer exception if(flag) { // do something }
回答:
与其引入新规则,不如使用 S2447:
Null
Should not returned from aBoolean
method 1 来阻止返回对象的方法Boolean
返回null
值呢?