Java 如何指示成员字段默认为@Nonnull?
我的问题是一个后续问题 在过去版本的FindBugs中,可以使用Java 如何指示成员字段默认为@Nonnull?,java,findbugs,jsr305,Java,Findbugs,Jsr305,我的问题是一个后续问题 在过去版本的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
。在FindBugs(2.0)的当前版本中,@DefaultAnnotation
和@DefaultAnnotationForFields
已被弃用,我们都应该改用JSR-305。但是JSR-305似乎并没有涵盖FindBugs注释(现已弃用)涵盖的所有内容
报告确实提出了一些备选方案:
- 默认情况下,
。这(显然)只适用于参数,而不适用于成员字段@参数不完整
- 当应用于类型或包时,
。同样,这不适用于成员字段@CheckReturnValue
。也许这可以做我想做的,但我不明白它是如何工作的,除了一些神秘的javadoc之外,我找不到任何关于它的用法或意图的文档或示例。我认为它将帮助我创建自己的注释,但是我能确保所有工具(FindBugs、Eclipse等)都能正确解释这个新注释吗(甚至根本不能)@TypeQualifierDefault
因此,使用当前版本的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)
啊,所以诀窍是定义自己的注释。。。我想这更具可扩展性,但我不明白为什么他们不能像默认情况下使用ParametersAreNonnull那样为这种情况创建标准注释。请注意,与JSR-305中的注释相比,您在自定义注释中使用的
Nonnull
的大小写不同,这可能会引起混淆。
@javax.annotation.ParametersAreNonnullByDefault
@com.habit.lib.lang.FieldsAreNonNullByDefault
@com.habit.lib.lang.ReturnTypesAreNonNullByDefault
package com.mypackagename.subpkg;