是否有一个默认的 class 级别的注解不被弃用,它默认指定非空 return 值
Is there a default, class-level annotation that is NOT deprecated that specifies non-null return values by default
Google 让我失望了。曾经有这样的注解:
ReturnValuesAreNonnullByDefault.
但这现在已被弃用,javadoc 没有指出要使用哪个新注释。 @Nonnull 总体上 class 不适用于 return 值,因为我刚刚对其进行了测试,并且没有收到关于方法 returning null 的警告。我不想专门注释每个 return 值,那么有没有好的选择?
您可以使用 this answer to build your own simple @EverythingIsNonnullByDefault
annotation to apply at the package/class level to cover all cases, or this one,它向您展示了如何创建单独的注释来管理字段和方法 return 值。我们选择全部使用它们,但倾向于在包级别应用 "everything" 版本。
如果您真的很着急,请复制并粘贴已弃用的注释并删除弃用。
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
}
如果您使用的是Checker Framework, then you can use @DefaultQualifier。例如,您可以写
@DefaultQualifier(value=NonNull.class, locations=DefaultLocation.RETURNS)
但是,您不需要这样做,因为 Checker Framework 的 Nullness Checker 已经使用了该默认值。 (正如您所发现的,最好的默认设置是假设每个方法 returns 为空。)
Nullness Checker 的一个优点是它比 FindBugs 检测到更多与空指针相关的错误。
Nullness Checker compatible 带有 FindBugs 注释,因此您可以试用 Nullness Checker,而无需更改代码中现有的 FindBugs 注释。
Google 让我失望了。曾经有这样的注解: ReturnValuesAreNonnullByDefault.
但这现在已被弃用,javadoc 没有指出要使用哪个新注释。 @Nonnull 总体上 class 不适用于 return 值,因为我刚刚对其进行了测试,并且没有收到关于方法 returning null 的警告。我不想专门注释每个 return 值,那么有没有好的选择?
您可以使用 this answer to build your own simple @EverythingIsNonnullByDefault
annotation to apply at the package/class level to cover all cases, or this one,它向您展示了如何创建单独的注释来管理字段和方法 return 值。我们选择全部使用它们,但倾向于在包级别应用 "everything" 版本。
如果您真的很着急,请复制并粘贴已弃用的注释并删除弃用。
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
}
如果您使用的是Checker Framework, then you can use @DefaultQualifier。例如,您可以写
@DefaultQualifier(value=NonNull.class, locations=DefaultLocation.RETURNS)
但是,您不需要这样做,因为 Checker Framework 的 Nullness Checker 已经使用了该默认值。 (正如您所发现的,最好的默认设置是假设每个方法 returns 为空。)
Nullness Checker 的一个优点是它比 FindBugs 检测到更多与空指针相关的错误。
Nullness Checker compatible 带有 FindBugs 注释,因此您可以试用 Nullness Checker,而无需更改代码中现有的 FindBugs 注释。