validar - variable null java
Java: ¿Cómo verificar si el objeto es nulo? (8)
DIY
private boolean isNull(Object obj) {
return obj == null;
}
Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (isNull(drawable)) {
drawable = getRandomDrawable();
}
Estoy creando una aplicación que recupera imágenes de la web. En caso de que la imagen no se pueda recuperar, se debe usar otra imagen local.
Al intentar ejecutar las siguientes líneas:
Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (drawable.equals(null)) {
drawable = getRandomDrawable();
}
La línea if (drawable.equals (null)) arroja una excepción si dibujable es nulo.
¿Alguien sabe cómo debe verificarse el valor de drawable para no arrojar una excepción en caso de que sea nulo y recuperar la imagen local (ejecute drawable = getRandomDrawable ())?
Probablemente sea un poco más eficiente capturar una NullPointerException. Los métodos anteriores significan que el tiempo de ejecución está buscando punteros nulos dos veces.
Utilice google guava libs para manejar is-null-check (actualización de deamon)
Drawable drawable = Optional.of(Common.getDrawableFromUrl(this, product.getMapPath())).or(getRandomDrawable());
Yo uso este enfoque:
if (null == drawable) {
//do stuff
} else {
//other things
}
De esta forma, creo que mejora la legibilidad de la línea, ya que leo rápidamente en un archivo fuente y veo que es una verificación nula.
Con respecto a por qué no puede llamar a .equals()
en un objeto que puede ser null
; si la referencia del objeto que tiene (es decir, ''dibujable'') es de hecho null
, no apunta a un objeto en el montón. Esto significa que no hay ningún objeto en el montón en el que la llamada a equals()
pueda tener éxito.
¡La mejor de las suertes!
if (yourObject instanceof yourClassName)
evaluará a false
si yourObject
es null
.
Solución Editado Java 8:
final Drawable drawable =
Optional.ofNullable(Common.getDrawableFromUrl(this, product.getMapPath()))
.orElseGet(() -> getRandomDrawable());
Puede declarar final
drawable
en este caso.
Como Chasmo señaló, Android no es compatible con Java 8 en este momento. Entonces esta solución solo es posible en otros contextos.
drawable.equals(null)
La línea anterior llama al método "igual (...)" en el objeto dibujable.
Entonces, cuando dibujable no es nulo y es un objeto real, todo va bien, ya que llamar al método "igual (nulo)" devolverá "falso"
Pero cuando "dibujable" es nulo, significa llamar al método "igual (...)" en el objeto nulo, significa llamar a un método en un objeto que no existe, por lo que arroja "NullPointerException"
Para verificar si un objeto existe y no es nulo, use la siguiente
if(drawable == null) {
...
...
}
En la condición anterior, estamos verificando que la variable de referencia "dibujable" sea nula o contenga algún valor (referencia a su objeto) para que no arroje una excepción en caso de que dibujable sea nulo como comprobación
null == null
es válida.
if (drawable == null) {
...
}
El método equals()
comprueba la igualdad de valores , lo que significa que compara el contenido de dos objetos. Como null
no es un objeto, se bloquea al intentar comparar el contenido de su objeto con el contenido de null
.
El operador ==
verifica la igualdad de referencia , lo que significa que busca si los dos objetos son realmente el mismo objeto . Esto no requiere que los objetos realmente existan; dos objetos inexistentes (referencias null
) también son iguales.