gpt4 book ai didi

java - 如何表示成员字段默认为@Nonnull?

转载 作者:IT老高 更新时间:2023-10-28 20:47:17 27 4
gpt4 key购买 nike

我的问题是 this one 的后续问题。 .

在过去的 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;

关于java - 如何表示成员字段默认为@Nonnull?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11776302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com