Привет, у меня есть код, о котором сообщает 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 на Sourceforge, ссылка https://sourceforge.net/tracker/?func=detail&aid=3277814&group_id=96405&atid=614693
Разговор о проблеме продолжится там.
var.equals(null)
раньше? Вы уверены, что повторно запустили Findbugs для этого файла (что я обычно делаю, так это называю чистые маркеры ошибок). - person Grzegorz Oledzki   schedule 17.03.2011var.equals(null)
, если бы это было так, это было бы легко понять. Как сказал jzd, это не выглядит неправильно. Если я получу дополнительное подтверждение того, что это не выглядит неправильно, я, вероятно, опубликую сообщение об ошибке (ложное срабатывание) с помощью Findbugs. - person AGrunewald   schedule 17.03.2011throw new NullPointerException
наthrow new RuntimeException
, маркер ошибки исчез бы. - person Grzegorz Oledzki   schedule 17.03.2011