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.
- Fragmentos androides getArguments () return null
- Nullpointerexcepiton en el cursor al seleccionar la foto de la galería en el fragmento de diálogo
- NullPointerException getDefaultSharedPreferences ()
- NullPointerException Advertencia sobre getView () dentro del método onActivityCreated / onStart / onViewCreated
- Problema para recuperar ConnectivityManager en un dispositivo con multi sim
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.
- NullPointerException acceder a las vistas en onCreate ()
- v7 RecyclerView NullPointerException AccessibilityDelegateCompat.getBridge ()
- Expectativa de puntero nulo al comprobar si SharedPrefs es igual a Null
- AddTextChangedListener () en EditText en android ActionBar
- GMail para KitKat se bloquea al enviar archivos adjuntos que no son imágenes o videos
- Excepción en unbindDrawables
- ¿Qué es una NullPointerException y cómo puedo solucionarlo?
- Utilice Picasso para colocar la imagen en dibujable
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.
- agregar vista (vista de texto) en AsyncTask
- Barra de acción de Android: deshabilita el menú de opciones