Existe-t-il un meilleur moyen de nier un booléen dans Java qu'un simple if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
theBoolean = !theBoolean;
theBoolean ^= true;
Moins de frappes si votre variable est plus longue que quatre lettres
La manière "évidente" (pour la plupart des gens)
theBoolean = !theBoolean;
Le "plus court" chemin (la plupart du temps)
theBoolean ^= true;
La manière "la plus visuelle" (la plus incertaine)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Etant donné que l'opérateur d'affectation retourne toujours ce qui a été affecté, cette option bascule la valeur via l'opérateur bit à bit, puis renvoie la valeur nouvellement affectée à utiliser dans l'appel de méthode.
Si vous utilisez des valeurs booléennes NULL et que vous les considérez comme fausses, essayez ceci:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Si vous ne donnez pas de valeur booléenne NULL, essayez ceci:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Ce sont les les plus propres car ils montrent l'intention dans la signature de la méthode, sont plus faciles à lire que l'opérateur ! et peuvent être facilement débogués.
Usage
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Bien sûr, si vous utilisez Groovy ou un langage qui permet les méthodes d'extension, vous pouvez enregistrer une extension et faire simplement:
Boolean b = false
b = b.toggle() // == true
Si vous ne faites rien de particulièrement professionnel, vous pouvez toujours utiliser une classe Util. Ex, une classe util d'un projet pour une classe.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
il suffit ensuite de créer un objet Util Util u = new Util();
et d'obtenir quelque chose pour le retour System.out.println( u.flip(bool) );
Si vous finissez par utiliser la même chose encore et encore, utilisez une méthode, et surtout si c'est pour tous les projets, créez une classe Util. Je ne sais pas quelle est la norme de l'industrie. (Les programmeurs expérimentés n'hésitez pas à me corriger)
Cette réponse est apparue lors de la recherche de "fonction Java invert boolean". L'exemple ci-dessous empêchera certains outils d'analyse statique d'échouer lors de la génération en raison d'une logique de branchement. C'est utile si vous avez besoin d'inverser un booléen et que vous n'avez pas construit de tests unitaires complets;)
Boolean.valueOf(aBool).equals(false)
ou bien:
Boolean.FALSE.equals(aBool)
ou
Boolean.FALSE::equals