当我通过 Findbugs 运行它时,我收到一个警告:
static @NonNull Object foo(@CheckForNull Object arg) {
if (arg == null) { // warning on this line
throw new NullPointerException();
}
return "something";
}
警告的详细信息如下:
Bug:
arg
必须为非空但被标记为可为空
模式 id:NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE
, type:NP
, category:STYLE
此参数始终以要求它为非空的方式使用,但该参数被显式注释为 be
Nullable
。参数的使用或注释的使用是错误的。
有人可以解释一下 Findbugs 在这里抱怨什么吗?
请注意,我使用的是edu.umd.cs.findbugs.annotations.*
成员,而不是javax.annotations.*
. (有区别吗?)
为 Eclipse 3.6.1 设置的是 FindBugs 插件 1.3.9.2009-。
Matthew Flaschen 建议我@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!
警告的详细信息是:
错误:由于调用方法的返回值可能导致空指针取消引用
Pattern id:NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
, type:NP
, category:STYLE
方法的返回值在没有检查的情况下被取消引用
null
,并且该方法的返回值通常应该被检查null
。这可能会导致NullPointerException
代码被执行。
我基本上想blah
满足@CheckForNull
要求,但是如果我将其设为 arg be ,我将无法做到@NonNull
。我怎样才能让它工作?