谷歌番石榴函数界面中的@Nullable输入会触发 FindBugs 警告
该界面(来自Google Guava)定义为:com.google.common.base.Function
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。参数或注释的使用是错误的。
我的函数不支持输入,如果是这种情况,则会引发异常。如果我理解正确,FindBugs将此视为非空值的要求。null
对我来说,这似乎是一个矛盾:输入是@Nullable但方法@throws NullPointerException,当它为空时。我错过了什么吗?
摆脱我能看到的警告的唯一方法是手动抑制。(显然,番石榴代码超出了我的控制范围)。
谁对@Nullable注释,FindBugs,番石榴或我自己的使用是错误的?