¿Cuál es la forma más concisa de obtener el inverso de un valor booleano de Java?
inverse (5)
¡Simplemente asigne usando el operador lógico NOT ! como usted tiende a hacer en sus estados de condición ( if , for , while ...). Ya está trabajando con un valor booleano, por lo que cambiará de true a false (y viceversa):
myBool = !myBool;
Esta pregunta ya tiene una respuesta aquí:
Si tienes una variable booleana:
boolean myBool = true;
Podría obtener el inverso de esto con una cláusula if / else:
if (myBool == true)
myBool = false;
else
myBool = true;
¿Hay una forma más concisa de hacer esto?
La forma más concisa es no invertir el booleano, y simplemente usar! MyBool más adelante en el código cuando desee verificar la condición opuesta.
Para un boolean es bastante fácil, un Boolean es un poco más desafiante.
- Un
booleansolo tiene 2 estados posibles:trueyfalse. - Un
Booleanpor otro lado, tiene 3:Boolean.TRUE,Boolean.FALSEonull.
Suponiendo que solo está tratando con un boolean (que es un tipo primitivo), entonces lo más fácil es:
boolean someValue = true; // or false
boolean negative = !someValue;
Sin embargo, si desea invertir un Boolean (que es un objeto), debe tener cuidado con el valor null , o puede terminar con una NullPointerException .
Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.
Suponiendo que este valor nunca sea nulo, y que su empresa u organización no tenga reglas de código contra el auto (un) boxeo. En realidad, puede simplemente escribirlo en una línea.
Boolean someValue = Boolean.TRUE; // or Boolean.FALSE
Boolean negativeObj = !someValue;
Sin embargo, si también quieres cuidar los valores null . Luego hay varias interpretaciones.
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);
Por otro lado, si desea que null permanezca null después de la inversión, entonces es posible que desee considerar el uso de la clase apache commons BooleanUtils ( consulte javadoc )
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negativeObj = BooleanUtils.negate(someValue);
Algunos prefieren simplemente escribirlo todo, para evitar tener la dependencia de Apache.
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
boolean negative = (someValue == null)? null : !someValue.booleanValue();
Boolean negativeObj = Boolean.valueOf(negative);
Una forma aún más myBool = !myBool (que es más concisa que myBool = !myBool para nombres de variables de más de 4 caracteres si desea establecer la variable):
myBool ^= true;
Y, por cierto, no use if (something == true) , es más simple si lo hace if (something) (lo mismo con la comparación con falso, use el operador de negación).
myBool = myBool ? false : true;