是否存在默认的类级别注释,该注释未被弃用,默认情况下指定非空返回值

Sel*_*ena 7 java annotations findbugs

谷歌让我失望.曾经有过这样的注释: ReturnValuesAreNonnullByDefault.

但现在已弃用此选项,并且javadoc未指示要使用的新注释.整个类的@Nonnull不适用于返回值,因为我刚刚测试了它,并且我没有得到返回null的方法的警告.我不想特别注释每一个返回值,那么有一个很好的选择吗?

Dav*_*ess 2

你可以使用这个答案构建您自己的简单@EverythingIsNonnullByDefault注释,以在包/类级别应用以涵盖所有情况,或者此答案向您展示如何创建单独的注释来管理字段和方法返回值。我们选择全部使用它们,但倾向于在包级别应用“所有”版本。

如果您真的很着急,请复制粘贴已弃用的注释并删除弃用。

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
}
Run Code Online (Sandbox Code Playgroud)