Интерфейс com.google.common.base.Function
(из Google Guava) определяет apply
как:
@Nullable T apply(@Nullable F input);
Метод имеет следующую заметку javadoc:
@throws NullPointerException if {@code input} is null and this function does not accept null arguments
.
FindBugs жалуется на мою реализацию функции:
private static final class Example implements Function<MyBean, String> {
@Override
@Nullable
public String apply(@Nullable MyBean input) {
if (null == input) {
throw new NullPointerException();
}
return input.field;
}
}
с предупреждением с высоким приоритетом:
NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE, приоритет: высокий
вход должен быть ненулевым, но отмечен как nullable
Этот параметр всегда используется так, чтобы он был ненулевым, но параметр явно аннотируется как Nullable. Либо использование параметра, либо аннотации неверно.
Моя функция не поддерживает входы null
и генерируется исключение, если это так. Если я правильно понимаю, FindBugs рассматривает это как требование для непустого.
Мне кажется, что это противоречие: input @Nullable, но метод @throws NullPointerException, когда он равен нулю. Я что-то упускаю?
Единственный способ избавиться от предупреждения, которое я вижу, - это ручное подавление. (Разумеется, код Guava мне не под силу).
Кто ошибается в использовании @Nullable аннотации, FindBugs, Guava или меня?