当前位置: 首页 > 面试题库 >

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

和和煦
2023-03-14
问题内容

在过去的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?可能吗?


问题答案:

我有一个类似的问题,发现以下内容似乎适用于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;


 类似资料:
  • 问题内容: 我似乎找不到或编写一个选择默认值的sqlquery (我不认为我可以在phpmyadmin中生成它供我复制) 我试图选择它,就好像它是一条记录,但无济于事… 问题答案: 或者我认为更好: 更新-更正 正如@Jeff Caron所指出的,只有在中至少有1行时,上述内容才有效。如果即使分组表没有行也要得到结果,则可以使用以下命令:

  • 我试图设置可变投掷SpEL在Spring启动应用程序: 应该来自应用程序-{profile}。财产。但是字段始终为空,即使已存在。 带有的代码可以正常工作,但包含空字符串。 我的问题是,如果使用SpEL的属性不存在,如何将null设置为variable。 upd:值来自特定于配置文件的属性文件

  • 问题内容: 我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的架构,如下所示: data.avsc: 我正在使用 avro-maven-plugin v1.7.6 生成Java模型。 当我使用:创建模型的实例时 ,它会失败并出现以下异常: org.apache.avro.AvroRuntimeException:org.apache.avro.AvroRuntimeException:字

  • 我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的模式,如下所示: 数据avsc: 我使用的是avro maven插件v1。7.6生成Java模型。 当我使用:创建模型的实例时,它会失败,但有一个异常: org.apache.avro.AvroRuntimeExc0019:org.apache.avro.AvroRuntimeExc0019:字段id类型: UNION pos: 0未设置

  • 我在下面输入< code>JSON: 但是,输出 应类似,并且仅添加默认值: 这是我的规范: 我应该编辑<code>JOLT</code>规范,但我不明白(默认字段名、姓和状态如何工作。created可以添加为“created”:“@(3,ninjaed in time)”

  • 我正在尝试在Opportunity更改Stage Standard对象的默认值 我采取的步骤: 使用规则条件创建工作流规则机会:创建日期不等于null 评估标准在创建记录时评估规则。 将操作添加为字段更新,并为拾取列表选择值 激活规则 但是没有发生任何事情,因为默认值仍然是-NONE- 我错过了什么?作为salesforce新手,我也不想使用扳机或按钮。