jqn*_*qno 21 java findbugs jsr305
我的问题是后续这一块.
在过去的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?它甚至可能吗?
小智 21
我有一个类似的问题,发现以下似乎适用于findbugs(2.0.1-rc2)
使用以下注释定义创建java文件
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonNullByDefault
{
}
Run Code Online (Sandbox Code Playgroud)
类似地,强制来自方法的所有返回值都是非null
@Nonnull
@TypeQualifierDefault(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReturnTypesAreNonNullByDefault
{
}
Run Code Online (Sandbox Code Playgroud)
然后正常注释包.
我使用以下代码进行测试(package-info.java)
@javax.annotation.ParametersAreNonnullByDefault
@com.habit.lib.lang.FieldsAreNonNullByDefault
@com.habit.lib.lang.ReturnTypesAreNonNullByDefault
package com.mypackagename.subpkg;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4284 次 |
| 最近记录: |