Java: ¿Cómo comprobar si el objeto es nulo?

Estoy creando una aplicación que recupera imágenes de la web. En caso de que no se pueda recuperar la imagen, se debe utilizar 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)) lanza una excepción si drawable es null.

¿Alguien sabe cómo se debe comprobar el valor de drawable para no lanzar una excepción en caso de que sea nulo y recuperar la imagen local (ejecutar drawable = getRandomDrawable ())?

8 Solutions collect form web for “Java: ¿Cómo comprobar si el objeto es nulo?”

Editado Java 8 Solución:

 final Drawable drawable = Optional.ofNullable(Common.getDrawableFromUrl(this, product.getMapPath())) .orElseGet(() -> getRandomDrawable()); 

En este caso se puede declarar final .

Como señaló Chasmo, Android no es compatible con Java 8 en este momento. Así que esta solución sólo es posible en otros contextos.

 if (drawable == null) { ... } 

El método equals() comprueba la igualdad de valor , lo que significa que compara el contenido de dos objetos. Dado que null no es un objeto, éste se bloquea al intentar comparar el contenido de su objeto con el contenido de null .

El operador == comprueba 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.

Yo uso este enfoque:

 if (null == drawable) { //do stuff } else { //other things } 

De esta manera me encuentro mejora la legibilidad de la línea – como he leído rápidamente a través de un archivo de origen puedo ver que es un cheque nulo.

Con respecto a por qué no se puede llamar a .equals() en un objeto que puede ser null ; Si la referencia de 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() puede tener éxito.

¡La mejor de las suertes!

Bricolaje

 private boolean isNull(Object obj) { return obj == null; } 

 Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath()); if (isNull(drawable)) { drawable = getRandomDrawable(); } 

if (yourObject instanceof yourClassName) evaluará a false si yourObject es null .

 drawable.equals(null) 

La línea anterior llama al método "equals (…)" sobre el objeto dibujable.

Por lo tanto, cuando drawable no es nulo y es un objeto real, entonces todo va bien al llamar al método "equal (null)" devolverá "false"

Pero cuando "drawable" es null, entonces significa llamar al método "equals (…)" en un objeto null, significa llamar a un método en un objeto que no existe por lo que lanza "NullPointerException"

Para comprobar si existe un objeto y no es nulo, use lo siguiente

 if(drawable == null) { ... ... } 

En la condición anterior, estamos comprobando que la variable de referencia "drawable" es null o contiene algún valor (referencia a su objeto) por lo que no lanzará excepción en caso de que drawable sea null como check

 null == null 

es válida.

Es probablemente un poco más eficiente para capturar una NullPointerException. Los métodos anteriores significan que el tiempo de ejecución está comprobando los punteros nulos dos veces.

Utilizar google guava libs para manejar is-null-check (actualización deamon)

 Drawable drawable = Optional.of(Common.getDrawableFromUrl(this, product.getMapPath())).or(getRandomDrawable()); 
  • Google Maps no se muestra de repente en Android
  • Eliminar una cadena en todos los idiomas Android
  • Android 6.0 (Marshmallow): Cómo jugar notas de midi?
  • Java socket no lanzar excepciones en un socket muerto?
  • ListView muestra sólo un elemento
  • Android-support-v7-appcompat no funciona
  • La barra de desplazamiento desaparece cuando se utiliza SectionIndexer en secciones específicas de HoneyComb
  • Android: cómo cambiar el estilo de editar texto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.