web-dev-qa-db-fra.com

SonarLint Utilisez ici l'expression booléenne primitive

J'ai les propriétés de classe suivantes:

class Properties {
    private Boolean enabled;

    public Boolean getEnabled() {
        return enabled;
    }
}

Si j'écris le code suivant, SonarLint me donne un avertissement sur la condition if disant "Utilisez l'expression booléenne primitive ici".

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

La modification de la condition if sur les éléments suivants ferme l'avertissement. Mais cela moins lisible, ce ne peut pas être ce que SonarLint veut ou?

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

Que veut exactement SonarLint que je fasse ici? Quel est le problème?

3
findusl

Comme d'autres déjà mentionnés, Sonar veut que vous vous assuriez que vous n'avez aucune exception de pointeur nul, ou du moins c'est ce que j'ai vu aussi quand je fais une vérification avant d'essayer de valider par rapport à la variable:

si j'ai le prochain, Sonar se plaint

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

Mais si j'ajoute une validation rapide contre les null, Sonar cesse de s'en plaindre

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

Maintenant, comme vous l'avez mentionné, vous pouvez utiliser la classe booléenne pour utiliser la prochaine

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

Comme

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

On dirait que c'est trop verbeux avec Java Mais en interne, ils vérifient si l'objet est d'instance booléenne, donc ils écartent la possibilité d'être nul, comme expliqué ici: Est-ce que la vérification est nulle nécessaire avant d'appeler instanceof?

Vous pouvez vérifier à partir du dépôt git ce qui est accepté et ce qui ne l'est pas:

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

1
Damonio

Essayez .booleanValue () Comme ceci si (properties.getEnabled (). BooleanValue ()) {} J'espère que cela vous aidera.

0
Rohit Chaurasiya

Utilisez org.Apache.commons.lang3.BooleanUtils, c'est un moyen null null:

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