代码之家  ›  专栏  ›  技术社区  ›  polygenelubricants

如何在findbugs中使用@checkfornull etc?

  •  1
  • polygenelubricants  · 技术社区  · 14 年前

    当我在findbugs中运行此命令时,会收到一个警告:

    static @NonNull Object foo(@CheckForNull Object arg) {
        if (arg == null) { // warning on this line
            throw new NullPointerException();
        }
        return "something";
    
    }
    

    警告的详细内容如下:

    缺陷: arg 必须为非空,但标记为可空
    模式ID: NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE ,类型: NP ,类别: STYLE

    此参数的使用方式总是要求它为非空,但该参数被显式地注释为 Nullable 是的。参数或注释的使用错误。

    有人能解释芬德布格在这里抱怨什么吗?

    注意,我正在使用 edu.umd.cs.findbugs.annotations.* 成员,而不是 javax.annotations.* 是的。(有区别吗?)

    设置为FindBugs插件1.3.9.2009-用于Eclipse3.6.1。


    马修·弗莱申建议我用 @NonNull 但是现在我遇到了这个问题:

    static void blah(@NonNull Object arg) {
        if (arg == null) {
            throw new NullPointerException();
        }
        System.out.println(arg);
    }
    
    static @CheckForNull Object bleh() {
        return null;
    }
    
    //...
    blah(bleh()); // warning here!
    

    警告的细节是:

    错误:调用的方法返回值可能导致空指针取消引用
    模式ID: NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE ,类型: NP公司 ,类别: 风格

    方法的返回值在没有 null check,该方法的返回值通常应该检查 无效的 是的。这可能会导致 NullPointerException 当代码执行时。

    我基本上想要 blah 为了满足 @CheckForNull 要求,但如果我把它的参数设为 @非空 是的。我怎样才能让它工作?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Matthew Flaschen    14 年前

    你在自相矛盾。 CheckForNull 意思是,“带注释的元素可能为空”,但如果是您立即抛出。

    如果调用方永远不能传递null,我相信您应该注释它:

    static @NonNull Object foo(@NonNull Object arg) {