Ответ 1
Ваша реализация неверна;)
В основном документы говорят (я перефразирую и подчеркиваю):
@throws NullPointerException
, еслиinput
имеет значение null и бетон функция не принимает нулевые аргументы
Внедряя свою функцию, вы должны решить, принимает ли она нули или нет. В первом случае:
private static final class Example implements Function<MyBean, String> {
@Override
@Nullable
public String apply(@Nullable MyBean input) {
return input == null ? null : input.field;
}
}
Во втором случае:
private static final class Example implements Function<MyBean, String> {
@Override
@Nullable
public String apply(MyBean input) {
if (null == input) {
throw new NullPointerException();
}
return input.field;
}
}
В обоих примерах допускается null.
EDIT:
Обратите внимание, что Guava использует @javax.annotation.ParametersAreNonnullByDefault
для всех пакетов, поэтому, если присутствует @Nullable
, это означает "приостановить глобальный @Nonnull
и разрешить здесь nulls", и если это не означает, что здесь запрещены запреты ".
Тем не менее, вы можете использовать аннотацию @Nonnull
для вашего аргумента или @ParametersAreNonnullByDefault
в пакете, чтобы сообщить, что аргумент функции FindBugs не может быть нулевым.
ИЗМЕНИТЬ 2:
Выключается этот случай известен как проблема, см. комментарий № 3 (от ведущего гигава Гувева Кевина Бурриллиона, о его разговоре с Биллом Пью, Findbugs '):
Моя рекомендация была серией личных бесед с Биллом Пью. Он недвусмысленно утверждал, что
@Nullable
означает только то, что некоторые подтипы может принять null. И это, по-видимому, подтверждается поисковыми машинами для нас - наш код довольно легко передает проверки на недействительность (хотя мы должен снова проверяться, поскольку это конкретное изменение функции было выполнено).