Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何指示成员字段默认为@Nonnull?_Java_Findbugs_Jsr305 - Fatal编程技术网

Java 如何指示成员字段默认为@Nonnull?

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注释(现已弃用

我的问题是一个后续问题

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

报告确实提出了一些备选方案:

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


因此,使用当前版本的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;