有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

非空注释和标准java包

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

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

map = new HashMap();
method(map.get("foo"));

将通过findbugs测试,即使它不应该通过。我是否可以配置findbugs以使其在这种情况下发出警报


共 (1) 个答案

  1. # 1 楼答案

    据文献记载,

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

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

    或者,您可以在类或包上使用@DefaultAnnotation(NonNull.class),然后仅在希望允许为null的参数、方法或字段上使用@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");
    }
    

    或者您可以使用http://c4j.sourceforge.net/尝试契约式设计