Si vous avez une variable booléenne:
boolean myBool = true;
Je pourrais obtenir l'inverse de ceci avec une clause if/else:
if (myBool == true)
myBool = false;
else
myBool = true;
Existe-t-il une manière plus concise de procéder?
Attribuez simplement à l'aide de l'opérateur logique NOT !
comme vous avez tendance à le faire dans vos instructions de condition (if
, for
, while
...). Vous travaillez déjà avec une valeur booléenne, donc elle basculera true
vers false
(et vice versa):
myBool = !myBool;
Une façon encore plus cool (qui est plus concise que myBool = !myBool
Pour les noms de variables de plus de 4 caractères si vous voulez définir la variable):
myBool ^= true;
Et au fait, n'utilisez pas if (something == true)
, c'est plus simple si vous faites simplement if (something)
(la même chose que si vous comparez avec false, utilisez l'opérateur de négation).
Pour un boolean
c'est assez facile, un Boolean
est un peu plus difficile.
boolean
n'a que 2 états possibles: true
et false
.Boolean
d'autre part, a 3: Boolean.TRUE
, Boolean.FALSE
ou null
.En supposant que vous traitez simplement avec un boolean
(qui est un type primitif) alors la chose la plus simple à faire est:
boolean someValue = true; // or false
boolean negative = !someValue;
Cependant, si vous voulez inverser un Boolean
(qui est un objet), vous devez faire attention à la valeur null
, ou vous pouvez vous retrouver avec un NullPointerException
.
Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.
En supposant que cette valeur n'est jamais nulle et que votre entreprise ou organisation n'a pas de règles de code contre la (dé) boxe automatique. Vous pouvez simplement l'écrire sur une seule ligne.
Boolean someValue = Boolean.TRUE; // or Boolean.FALSE
Boolean negativeObj = !someValue;
Cependant, si vous souhaitez également prendre soin des valeurs null
. Il y a ensuite plusieurs interprétations.
boolean negative = !Boolean.TRUE.equals(someValue); //--> this assumes that the inverse of NULL should be TRUE.
// if you want to convert it back to a Boolean object, then add the following.
Boolean negativeObj = Boolean.valueOf(negative);
D'un autre côté, si vous voulez que null
reste null
après l'inversion, vous pouvez envisager d'utiliser le Apache commons
classe BooleanUtils
( voir javadoc )
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negativeObj = BooleanUtils.negate(someValue);
Certains préfèrent simplement tout écrire, pour éviter d'avoir la dépendance Apache.
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
boolean negative = (someValue == null)? null : !someValue.booleanValue();
Boolean negativeObj = Boolean.valueOf(negative);
La manière la plus concise est de ne pas inverser le booléen, et d'utiliser simplement! MyBool plus tard dans le code lorsque vous voulez vérifier la condition opposée.