您可以申请@CheckForNull
通过将注释添加到包中的所有方法返回值(和/或参数)package-info.java
文件,但您无法控制各个方法。
首先,创建@ReturnValuesAreCheckForNullByDefault
在您项目的实用程序包中。
@Documented
@CheckForNull
@TypeQualifierDefault(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReturnValuesAreCheckForNullByDefault { /* noop */ }
接下来,创建src/java/util/package-info.java
.
@ReturnValuesAreCheckForNullByDefault
package java.util;
import my.project.util.ReturnValuesAreCheckForNullByDefault;
最后,享受 FindBugs 警告吧。
@Nonnull
public String getValue() {
Map<String, String> values = new HashMap<>();
return values.get("foo"); // <-- Possible null pointer dereference ...
}
这样做的问题是,有很多方法java.*
合同规定的包裹do not return null
。使用这些而不检查null
会发出警告。例如,这个 NPE 安全代码也会引发警告:
@Nonnull
public Set<String> getNotNull() {
Map<String, String> values = new HashMap<>();
return values.keySet();
}
您可以使用以下命令抑制警告@SuppressFBWarnings
,但这可能会使代码变得过于混乱,不符合您的喜好。