在过去的FindBugs版本中,可以使用@DefaultAnnotation(Nonnull.class)或@DefaultAnnotationForFields(Nonnull.class)指示包中的所有 字段 都应视为@Nonnull。在FindBugs的(2.0)的当前版本@DefaultAnnotation和@DefaultAnnotationForFields已被弃用,并且我们都应该使用JSR-305来代替。但是,JSR-305似乎并未涵盖(现已弃用的)FindBugs注释所涵盖的所有内容。
@DefaultAnnotation(Nonnull.class)
@DefaultAnnotationForFields(Nonnull.class)
@Nonnull
@DefaultAnnotation
@DefaultAnnotationForFields
该javadoc的确实表明了一些替代品:
@ParametersAreNonnullByDefault
@CheckReturnValue
@TypeQualifierDefault
该javadoc中没有提供关于如何处理其弃用任何提示。
因此,使用FindBugs和/或JSR-305的当前版本,我应该如何指示某个包(甚至某个类)中的所有成员字段都应被视为@Nonnull?可能吗?
我有一个类似的问题,发现以下内容似乎适用于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;