Java Sonar Null 警告“返回 null 但需要布尔值”

Yas*_*sin 2 java boolean sonarqube

如何以可读或逻辑的方式编辑此代码块,以便我不会收到来自声纳的警告?我需要三个结果falsetrue或者null

 public Boolean x() {
    if (...) {
        return true;
    } else if (...) {
        return false;
    } else {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*900 5

虽然你可以返回 null,但你不应该,至少根据squid: S2447

虽然null从技术上讲是一个有效值,但这一事实以及和Boolean之间的区别很容易被忘记。因此从方法返回可能会导致调用者代码出现问题。BooleanbooleannullBoolean

如果您不同意,可以在本地禁用它:

return null;//NOSONAR
Run Code Online (Sandbox Code Playgroud)

或者在设置中完全停用此规则

声纳组也讨论了:

许多规则还批评了我个人认为不错的事情,即“不应从“布尔”方法返回 Null(squid:S2447)”。所以我可能无法给出好的建议。

声纳社区问题:

我建议应该有一个额外的规则。

所以布尔值不应该这样检查:

Boolean flag = service.getFlag();
// that's the unsafe call which could cause a null pointer exception
if(flag) {
     // do something
}
Run Code Online (Sandbox Code Playgroud)

回答:

与其引入新规则,不如使用 S2447: NullShould not returned from a Booleanmethod 1 来阻止返回对象的方法Boolean返回null值呢?