web-dev-qa-db-fra.com

Le moyen le plus propre de basculer une variable booléenne en Java?

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;
}
198
Kevin Griffin
theBoolean = !theBoolean;
500
Aaron Maenpaa
theBoolean ^= true;

Moins de frappes si votre variable est plus longue que quatre lettres

155
user19302

Il y a plusieurs

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;

Extra: Basculer et utiliser dans un appel de méthode

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.

28
Levit

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
2
Steven Spungin

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)

0
Will D.

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
0
Doctor Parameter