两者有什么区别?两者似乎都意味着该值可能为空,应进行相应处理,即检查是否为空。
更新: 上面的两个注释是 JSR-305/FindBugs 的一部分:http: //findbugs.sourceforge.net/manual/annotations.html
两者有什么区别?两者似乎都意味着该值可能为空,应进行相应处理,即检查是否为空。
更新: 上面的两个注释是 JSR-305/FindBugs 的一部分:http: //findbugs.sourceforge.net/manual/annotations.html
我认为您添加的链接很清楚:如果您使用@CheckForNull
并且使用该值的代码不检查null
,FindBugs 会将其显示为错误。
FindBugs 将忽略@Nullable
.
在实践中,此注释仅对覆盖总体
NonNull
注释有用。
@CheckForNull
在必须始终检查值的情况下使用。使用可能没问题的@Nullable
地方。null
编辑:目前似乎@CheckForNull
没有得到很好的支持,所以我建议避免使用它@NonNull
(另请参阅我应该使用哪个 @NotNull Java 注释?)。另一个想法是直接与 FindBugs 开发人员联系,并询问他们对文档中不一致的意见。
@Nonnull
并由@Nullable
IntelliJ IDEA 正确处理。FindBugs 发现了问题,@Nonnull
但错过了@Nullable
和的问题@CheckForNUll
。IDEA 和 FindBugs 检测到的问题都标有注释。
package com.db.icestation;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class test {
@Nullable public String nullable() {
return "";
}
@Nonnull public String nonnull() {
return null; // IDEA, findbugs
}
@CheckForNull public String checkForNull() {
return null;
}
public static void main(String[] args) {
System.out.println(new test().nullable().length()); // IDEA
System.out.println(new test().nonnull().length());
System.out.println(new test().checkForNull().length());
}
}
IntelliJ Idea@javax.annotation.Nullable
默认支持,任何取消引用@Nullable
参数或返回值的尝试都会导致警告。
@alexander-pavlov,您可以添加@javax.annotation.CheckForNull
“恒定条件和异常”检查的配置。转到文件->设置->检查->可能的错误->恒定条件和异常->配置注释。
我更喜欢这样做,因为它比他在上面的回答中提到的@lbalazscs@CheckForNull
具有更明确的含义。@Nullable