web-dev-qa-db-ja.com

SonarLintここではプリミティブなブール式を使用します

次のクラスプロパティがあります。

class Properties {
    private Boolean enabled;

    public Boolean getEnabled() {
        return enabled;
    }
}

次のコードを記述すると、SonarLintはif条件に対して「ここでプリミティブなブール式を使用してください」という警告を表示します。

if (!properties.getEnabled()) {
    return true;
}
// more code

If条件を次のように変更すると、警告が表示されなくなります。しかし、それほど読みにくく、それはSonarLintが望んでいることではありませんか?

if (properties.getEnabled().equals(Boolean.FALSE)) {
    return true;
}
// more code

SonarLintはここで私に何をしたいのですか?何が問題ですか?

3
findusl

他のすでに述べたように、Sonarは、nullポインター例外がないことを確認するように求めています。少なくとも、変数に対して検証する前にチェックを行ったときに、これも確認しました。

次がある場合、Sonarは不平を言います

if (properties.getEnabled()) {
       // Your code
}

しかし、nullに対するクイック検証を追加すると、Sonarはそれについて不平を言うのをやめます

if (properties.getEnabled() != null && properties.getEnabled()) {
       // Your code
}

今、あなたが述べたように、あなたはブールクラスを使用して次を使用することができます

Boolean.TRUE.equals(properties.getEnabled());

なので

if (Boolean.TRUE.equals(properties.getEnabled())){
       // Your code
}

Javaでは冗長すぎるようですが、内部では、オブジェクトがブール型であるかどうかをチェックするため、ここで説明するように、nullである可能性を破棄します: Is null check instanceofを呼び出す前に必要ですか?

Git repoから、何が受け入れられ、何が受け入れられないかを確認できます。

https://github.com/SonarSource/sonar-Java/blob/master/Java-checks/src/test/files/checks/BoxedBooleanExpressionsCheck.Java

1
Damonio

.booleanValue()を試してみてくださいif(properties.getEnabled()。booleanValue())のように{}それがuに役立つことを願っています。

0

Org.Apache.commons.lang3.BooleanUtilsを使用してください。これはnullセーフな方法です。

if (BooleanUtils.isNotTrue(properties.getEnabled())) {
    return true;
}
0
saffer