Когда я запускаю это через Findbugs, я получаю предупреждение:
static @NonNull Object foo(@CheckForNull Object arg) {
if (arg == null) { // warning on this line
throw new NullPointerException();
}
return "something";
}
Подробности предупреждения следующие:
Ошибка: arg
должно быть ненулевымно помечается как обнуляемый
Идентификатор шаблона: NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE
, тип: NP
, категория: STYLE
Этот параметр всегда используется таким образом, что он должен быть ненулевым, но параметрявно аннотируется как Nullable
.Либо использование параметра, либо аннотация неверна.
Может кто-нибудь объяснить, на что здесь жалуется Findbugs?
Обратите внимание, что я использую edu.umd.cs.findbugs.annotations.*
членов, а не javax.annotations.*
.(Есть ли разница?)
Установлен плагин FindBugs 1.3.9.2009 - для Eclipse 3.6.1.
Мэтью Флэшен предложил использовать вместо меня @NonNull
,но теперь я столкнулся с этой проблемой:
static void blah(@NonNull Object arg) {
if (arg == null) {
throw new NullPointerException();
}
System.out.println(arg);
}
static @CheckForNull Object bleh() {
return null;
}
//...
blah(bleh()); // warning here!
Подробности предупреждения:
Ошибка: возможное разыменование нулевого указателя из-за возвращаемого значения вызываемого метода
Patternid: NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
, тип: NP
, категория: STYLE
Возвращаемое значение из метода разыменовывается без проверки null
, а возвращаемое значение этого метода обычно должно бытьпровериться на null
.Это может привести к NullPointerException
при выполнении кода.
Я в основном хочу, чтобы blah
удовлетворял требованию @CheckForNull
, но я не могу сделать это, если я сделаю его аргумент@NonNull
.Как мне заставить это работать?