您可以@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.*
合同不返回的方法null
。在不检查的情况下使用这些null
会引发警告。例如,这个 NPE 安全代码也会引发警告:
@Nonnull
public Set<String> getNotNull() {
Map<String, String> values = new HashMap<>();
return values.keySet();
}
您可以使用 来抑制警告@SuppressFBWarnings
,但这可能会使代码过于混乱,不合您的喜好。