如何在默认情况下指示成员字段是@Nonnull?

我的问题是对这一问题的后续行动。

在以前版本的FindBugs中,可以使用@DefaultAnnotation(Nonnull.class)@DefaultAnnotationForFields(Nonnull.class)来指示包中的所有字段都应该被视为@Nonnull 。 在当前版本的FindBugs(2.0)中,不推荐使用@DefaultAnnotation@DefaultAnnotationForFields ,我们都应该使用JSR-305。 但JSR-305似乎并未涵盖(现已弃用)FindBugs注释所涵盖的所有内容。

javadoc确实提出了许多替代方案:

  • @ParametersAreNonnullByDefault 。 这(显然)仅适用于参数,而不适用于成员字段。
  • @CheckReturnValue ,应用于类型或包时。 同样,这不适用于成员字段。
  • @TypeQualifierDefault 。 也许这可以做我想要的,但我不明白它是如何工作的,除了一些神秘的javadoc之外,我无法找到任何有关其用法或意图的文档或示例。 我认为这将有助于我创建自己的注释,但我可以确定所有工具(FindBugs,Eclipse等)都能正确地解释这个新注释(甚至根本没有)吗?

javadoc没有提供有关如何处理其弃用的任何提示。

因此,使用当前版本的FindBugs和/或JSR-305,我应该如何指出特定包中(甚至某个类中)的所有成员字段都应该被视为@Nonnull ? 它甚至可能吗?

我有一个类似的问题,发现以下似乎适用于findbugs(2.0.1-rc2)

使用以下注释定义创建java文件

 @Nonnull @TypeQualifierDefault(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface FieldsAreNonNullByDefault { } 

类似地,强制来自方法的所有返回值都是非null

 @Nonnull @TypeQualifierDefault(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ReturnTypesAreNonNullByDefault { } 

然后正常注释包。

我在测试中使用了以下内容(package-info.java)

 @javax.annotation.ParametersAreNonnullByDefault @com.habit.lib.lang.FieldsAreNonNullByDefault @com.habit.lib.lang.ReturnTypesAreNonNullByDefault package com.mypackagename.subpkg;