pol*_*nts 1 java eclipse null annotations findbugs
当我通过Findbugs运行时,我收到一个警告:
static @NonNull Object foo(@CheckForNull Object arg) {
if (arg == null) { // warning on this line
throw new NullPointerException();
}
return "something";
}
Run Code Online (Sandbox Code Playgroud)
警告的详细信息如下:
错误:
arg
必须是非空的,但标记为可为空的
模式ID :NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE
,类型:NP
,类别:STYLE
此参数始终以要求它为非空的方式使用,但该参数显式注释为
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!
Run Code Online (Sandbox Code Playgroud)
警告的细节是:
错误:由于被调用方法的返回值而可能出现空指针取消引用
模式ID :NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
,类型:NP
,类别:STYLE
方法的返回值在没有
null
检查的情况下被解引用,并且该方法的返回值通常应该检查null
.这可能导致NullPointerException
代码执行的时间.
我基本上想要blah
满足@CheckForNull
要求,但如果我把它作为arg,我就做不到@NonNull
.我如何让它工作?
你自相矛盾. CheckForNull
表示"带注释的元素可能为空",但如果是,则立即抛出.
如果调用者传递null是不可接受的,我相信你应该注释它:
static @NonNull Object foo(@NonNull Object arg) {
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3658 次 |
最近记录: |