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?
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:
Essayez .booleanValue () Comme ceci si (properties.getEnabled (). BooleanValue ()) {} J'espère que cela vous aidera.
Utilisez org.Apache.commons.lang3.BooleanUtils, c'est un moyen null null:
if (BooleanUtils.isNotTrue(properties.getEnabled())) {
return true;
}