Tengo el siguiente código:
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
¿Por qué mi chequeo en la variable booleana "bool" resulta en una excepción? ¿No debería simplemente saltar más allá de la declaración if cuando "ve" que no es cierto? Cuando elimino la declaración if o verifico si NO es nula, la excepción desaparece.
if (bool == Boolean.TRUE)
evalúa falso sin generar una excepción. No estoy seguro si esto fue intencional en el caso que acabo de encontrar.bool
sernull
OR siBoolean
se construyera explícitamente (y no como referenciaBoolean.TRUE
). Entonces no recomendado; a diferencia deif (Boolean.TRUE.equals(bool))
lo que funcionaría como se esperaba, incluido el manejo seguro delnull
valor.Respuestas:
Cuando tienes un
boolean
puede sertrue
ofalse
. Sin embargo, cuando tienes unBoolean
puede ser cualquieraBoolean.TRUE
,Boolean.FALSE
onull
como cualquier otro objeto.En su caso particular, su instrucción
Boolean
isnull
y laif
desencadena una conversión implícita a laboolean
que produce elNullPointerException
. Es posible que necesite en su lugar:fuente
Boolean
puede ser cualquier número de instancias verdaderas, no soloBoolean.TRUE
. Por ejemplonew Boolean(true)
.if (myBoolean)
(dóndemyBoolean
estáBoolean
) no genera un error del compilador o al menos una advertencia. Este es un problema seguro.Si no le gustan los cheques nulos adicionales:
fuente
Utilice los Apache BooleanUtils .
(Si el rendimiento máximo es la prioridad más importante en su proyecto, busque una de las otras respuestas para una solución nativa que no requiera incluir una biblioteca externa).
No reinventes la rueda. Aproveche lo que ya se ha construido y use
isTrue()
:Comprueba si un
Boolean
valor es verdadero, manejándolonull
regresandofalse
.Si no está limitado a las bibliotecas que está "permitido" incluir, hay un montón de excelentes funciones auxiliares para todo tipo de casos de uso, incluidos
Booleans
yStrings
. Le sugiero que lea detenidamente las diversas bibliotecas de Apache y vea lo que ya ofrecen.fuente
toStringYesNo
de esta biblioteca en todas mis aplicaciones.Boolean
tipos pueden sernull
. Debe hacer unanull
comprobación tal como la configurónull
.fuente
O con el poder de Java 8 Opcional, también puedes hacer ese truco:
:)
fuente
Boolean es la clase de contenedor de objetos para el booleano primitivo. Esta clase, como cualquier clase, puede ser nula. Por razones de rendimiento y memoria, siempre es mejor usar el primitivo.
Las clases de contenedor en la API de Java tienen dos propósitos principales:
http://en.wikipedia.org/wiki/Primitive_wrapper_class
fuente
Como su variable bool apunta a un valor nulo, siempre obtendrá una NullPointerException, primero debe inicializar la variable en algún lugar con un valor no nulo y luego modificarla.
fuente
catch
bloque manejaría la NullPointerException. El problema aquí es que el OP intenta desempaquetar una referencia nula en una primitiva.null
y luego probarla. Presumiblemente, el código real no sería tan simple o toda laif
prueba podría eliminarse.