Hola He conseguido algo de código que se reporta como teniendo el problema NP_GUARANTEED_DEREF por Findbugs. Ahora, al mirar mi código, no entiendo muy bien qué tiene de malo, ¿alguien puede sugerir cuál es el problema?cómo solucionar el problema Findbugs "valor nulo se garantiza que sea dereferenced" NP_GUARANTEED_DEREF
public void test() {
String var = "";
int index = 2;
if (index == -1) {
var = String.class.getName();
if (var.length() == 0) {
var = null;
}
} else {
var = Integer.class.getName();
if (var.length() == 0) {
var = null;
}
}
if (var == null) {// FINBUGS reports on this line NP_GUARANTEED_DEREF
/*
* There is a statement or branch that if executed guarantees that a value
* is null at this point, and that value that is guaranteed to be
* dereferenced (except on forward paths involving runtime exceptions).
*/
throw new NullPointerException("NULL");
}
}
Ahora perforación en el error en Findbugs se destacan las dos asignaciones a var = null;
como causa del fallo, pero no acabo de entender por qué. No es que realmente esté haciendo algo con el objeto var
. Solo estoy haciendo una comprobación nula. El ejemplo se toma del código de producción real, pero se despoja de todo lo que no era necesario para reproducir el error. Lo que me pregunto si esto es un falso positivo o no. Y si no, ¿cuál sería una solución adecuada?
Aquí está el enlace a la Bug Detalle Findbugs: http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF
[ACTUALIZACIÓN] Después está recibiendo algunos comentarios sobre este tema ahora he conectado esto como un falso positivo en el Findbugs Bugtracker en Sourceforge el enlace es https://sourceforge.net/tracker/?func=detail&aid=3277814&group_id=96405&atid=614693
La conversación sobre el problema continuará allí.
¿Alguna vez tuvo 'var.equals (null)' antes? ¿Estás seguro de que has vuelto a ejecutar Findbugs en ese archivo (lo que suelo hacer es llamar a los "limpiadores de errores"). –
Sí, estoy seguro de que he vuelto a ejecutar Findbugs, y no, nunca fue 'var.equals (null)' si fuera que sería fácilmente comprensible. Como jzd dijo que no se ve mal. Si recibo más confirmación de que esto no se ve mal, probablemente publique un error para (falso positivo) con Findbugs – AGrunewald
que veo. Puedo confirmar el mismo comportamiento de FB en mi computadora. Parece extraño de verdad. Lo que es gracioso es que si reemplazaste 'throw new NullPointerException' con' throw new RuntimeException' desaparecería el marcador de error. –