但现在不推荐这样做了,javadoc并没有指出要使用哪个新注释。整个类的@Nonnull不适用于返回值,因为我刚刚测试了它,并且我没有得到返回null的方法的警告。我不想特别注释每一个返回值,那么有一个很好的选择吗?
答案 0 :(得分:2)
您可以使用this answer构建自己的简单@EverythingIsNonnullByDefault
注释,以便在包/类级别应用以涵盖所有情况,或this one向您展示如何创建单独的注释管理字段和方法返回值。我们选择使用它们,但倾向于使用"所有内容"包级别的版本。
如果您真的很匆忙,请复制粘贴已弃用的注释并删除弃用。
package com.sample;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.annotation.meta.TypeQualifierDefault;
/**
* This annotation can be applied to a package or class to indicate that the
* classes' methods in that element all return nonnull values by default
* unless there is
* <ul>
* <li>an explicit nullness annotation
* <li>a default method annotation applied to a more tightly nested element.
* </ul>
*/
@Documented
@Nonnull
@TypeQualifierDefault(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReturnValuesAreNonnullByDefault {
// feel free to name it MethodsAreNonnullByDefault; I find that confusing
}
答案 1 :(得分:2)
如果您使用Checker Framework,则可以使用@DefaultQualifier。例如,你可以写
@DefaultQualifier(value=NonNull.class, locations=DefaultLocation.RETURNS)
但是,您不需要这样做,因为Checker Framework的Nullness Checker已经使用了该默认值。 (正如您所发现的,最好的默认设置是假设每个方法都返回null。)
Nullness Checker的一个优点是它可以检测到比FindBugs更多的与空指针相关的错误。
Nullness Checker是compatible,带有FindBugs的注释,因此您可以尝试Nullness Checker,而无需更改代码中的现有FindBugs注释。