Привет, у меня есть код, который, как сообщает Findbugs, имеет проблему 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");
}
}
Теперь углубляясь в ошибку в Findbugs, он выделяет два присвоения var = null;
как причину ошибки, но я не совсем понимаю почему. Это не похоже на то, что я на самом деле что-то делаю с объектом var
, я просто выполняю проверку Null. Пример взят из реального производственного кода, но лишен всего, что не было необходимо для воспроизведения ошибки. Что мне интересно, ложно это или нет. А если нет, то какое исправление было бы подходящим.
Вот ссылка на подробные сведения об ошибке Findbugs: http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF
[ОБНОВЛЕНИЕ] После получения отзывов по этой проблеме я зарегистрировал это как ложное срабатывание в Findbugs Bugtracker на Sourceforge по ссылке https://sourceforge.net/tracker/?func=detail&aid=3277814&group_id = 96405 & atid = 614693
Здесь будет продолжаться разговор о проблеме.