如何表明成员字段默认@Nonnull?(How to indicate that member fi

2019-07-30 18:03发布

我的问题是后续这一块 。

在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 ? 它甚至有可能?

Answer 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
{
}

然后注释包为正常。

我用我的测试(package-info.java)以下

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

package com.mypackagename.subpkg;


文章来源: How to indicate that member fields are @Nonnull by default?