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

2022-09-01 19:18:33

我的问题是这个问题的后续问题。

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

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

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

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

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


答案 1

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

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

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

类似地,强制方法中的所有返回值都为非空值

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

,然后像往常一样对包进行批注。

我在测试中使用了以下内容(包信息.java)

@javax.annotation.ParametersAreNonnullByDefault
@com.habit.lib.lang.FieldsAreNonNullByDefault
@com.habit.lib.lang.ReturnTypesAreNonNullByDefault

package com.mypackagename.subpkg;

答案 2

推荐