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 抱怨我的 Function 实现:
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,优先级:高
输入必须为非空,但被标记为可为空
此参数始终以要求它为非空的方式使用,但该参数被显式注释为可空。参数的使用或注释的使用是错误的。
我的函数不支持null
输入,如果是这种情况,则会引发异常。如果我理解正确,FindBugs 将此视为非空的要求。
对我来说,这看起来很矛盾:输入是@Nullable,但是当它为空时方法@throws NullPointerException。我错过了什么吗?
摆脱我能看到的警告的唯一方法是手动抑制。(显然,番石榴代码超出了我的控制范围)。
@Nullable 注解、FindBugs、Guava 还是我自己的用法谁错了?