En Java, si un puntero nulo sucede muy raramente es mejor usar catch en lugar de if

Limpiar algunos sueltos en mis aplicaciones de Android Encontré una excepción de puntero nulo en la consola de desarrolladores que nunca sucedió y supongo que es una condición de carrera rara.

Para aquellos que no saben: Android permite al usuario reportar fallos (excepción iE uncaught) de nuevo al desarrollador.

Ya comencé a escribir el infame if (… != null) cuando se me ocurrió: Sólo hay tres informes. Así ocurre muy raramente.

Así que me pregunto: En esta situación, y el rendimiento sabio: ¿No sería mejor para capturar la excepción puntero nulo en su lugar?

Considerando que el if será evaluado cada vez.

No para sonar como una persona fanática o estrecho de mente, pero creo firmemente NPE nunca debe ser permitido que ocurra en el primer lugar ! La captura de NPE es una práctica muy mala en mi opinión. Esto significa que no está completamente enterado de cómo está funcionando su código.

Lo primero que debe hacer siempre antes de usar alguna entrada es comprobar si hay nulo.

¿Con qué frecuencia es "cada vez"? ¿Una vez por carga? ¿Cada minuto? 1000 veces por segundo?

En cualquier caso, una prueba para obj == null es tan barata una operación como se puede obtener, y ciertamente más barato que la manipulación de excepciones.

Y una excepción de puntero nulo nunca debe suceder – que necesitan ser entendidos y evitados. Si usted no sabe por qué está sucediendo, eso necesita ser arreglado.

Se deben usar excepciones para manejar casos excepcionales. Es decir, si se espera que el valor sea nulo, entonces es razonable comprobarlo en lugar de capturar la excepción. No puedo pensar en ningún ejemplo donde la captura de una NullPointerException sería mejor que manejarlo en el flujo de control normal.

Si es una condición de racha multiproceso podría ser posible que la variable se está inicializando y luego poner a null de nuevo? Si es así, el "if (…! = Null)" podría pasar y entonces aparecería una excepción.

Yo usaría el try catch para ser seguro (las excepciones no manejadas del puntero nulo son algo que debería evitarse), sino también tratar de encontrar la condición de carrera y si es posible o manejable dentro de una cantidad superviseable de tiempo arreglar o manejar eso.

También puede esperar unos pocos ms y volver a intentarlo durante un determinado número de veces si aparece una excepción para evitar la condición de carrera (no es muy bonita pero funciona).

Encontré una excepción de puntero nulo en la consola de desarrolladores que nunca pasó a ser y mi conjetura es una condición de carrera rara

Eso suena como un error y sólo la captura de la excepción suena como que la intención de ignorar el error en lugar de arreglarlo. Averigüe de dónde vienen estos valores nulos y arreglarlo, no deje que los punteros nulos se propaguen al código que no puede ocuparse de ellos.

  • ViewPager ¿Fragmentos que se destruyen con el tiempo?
  • NullPointerException en SharedPreferences Android
  • Class.getResource (className) que me da NullPointerException
  • Excepción de puntero nulo al instanciar la resolución de contenido?
  • RecyclerView ViewPager java.lang.NullPointerException android.support.v7.widget.RecyclerView $ ItemAnimator $ ItemHolderInfo.left
  • Error invocar método virtual 'doble android.location.Location.getLatitude ()' en una referencia de objeto nulo
  • El botón puede producir una excepción de puntero nulo (Android Studio)
  • Nullpointer excepción en oncreateView () de fragmento
  • Expectativa de puntero nulo al configurar LayoutParams
  • Intenta invocar el método virtual 'java.lang.String android.content.Context.getPackageName ()' en una referencia de objeto nulo
  • Mi ubicación actual siempre devuelve null. ¿Cómo puedo arreglar esto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.