Nonnull注释和标准java包

vir*_*tor 5 java annotations findbugs

我正在尝试将findbugs兼容的注释添加到项目中,但注意到@Nonnull并不总是像我期望的那样处理.例如,findbugs不假设标准本机集合可以返回null:

void method(@Nonnull String bar) {...}

map = new HashMap();
method(map.get("foo"));
Run Code Online (Sandbox Code Playgroud)

将通过findbugs测试,即使它不应该.在这种情况下,我可以以某种方式配置findbugs以使其警报吗?

zud*_*kod 2

根据文件,

被注释的元素不能为空。注释字段在构造完成后不得为空。带注释的方法必须具有非空返回值。

@Documented
@Target(value={FIELD,METHOD,PARAMETER,LOCAL_VARIABLE})
@Retention(value=CLASS)
@Nonnull(when=ALWAYS)
@TypeQualifierNickname
public @interface NonNull
Run Code Online (Sandbox Code Playgroud)

或者您可以在类或包上使用@DefaultAnnotation(NonNull.class),然后仅在您希望允许为空的参数、方法或字段上使用@Nullable。

分析是在源代码上完成的。

所以试试这个,它对我有用

/**
 * @param args
 */
public static void main(String[] args) {
    method( getValue());
}

private static void method(@NonNull Object obj){
    System.out.println(obj);
}

@CheckForNull
private static Object getValue(){
    Map map = new HashMap();
    return map.get("foo");
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用http://c4j.s​​ourceforge.net/尝试按合同设计