作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的问题是 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/
我是一名优秀的程序员,十分优秀!