55

两者有什么区别?两者似乎都意味着该值可能为空,应进行相应处理,即检查是否为空。

更新: 上面的两个注释是 JSR-305/FindBugs 的一部分:http: //findbugs.sourceforge.net/manual/annotations.html

4

3 回答 3

34

我认为您添加的链接很清楚:如果您使用@CheckForNull并且使用该值的代码不检查null,FindBugs 会将其显示为错误。

FindBugs 将忽略@Nullable.

在实践中,此注释仅对覆盖总体NonNull注释有用。

@CheckForNull在必须始终检查值的情况下使用。使用可能没问题的@Nullable地方。null

编辑:目前似乎@CheckForNull没有得到很好的支持,所以我建议避免使用它@NonNull(另请参阅我应该使用哪个 @NotNull Java 注释?)。另一个想法是直接与 FindBugs 开发人员联系,并询问他们对文档中不一致的意见。

于 2012-09-06T14:05:42.543 回答
10

@Nonnull并由@NullableIntelliJ IDEA 正确处理。FindBugs 发现了问题,@Nonnull但错过了@Nullable和的问题@CheckForNUll。IDEA 和 FindBugs 检测到的问题都标有注释。

package com.db.icestation;

import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class test {

    @Nullable public String nullable() {
        return "";
    }

    @Nonnull public String nonnull() {
        return null; // IDEA, findbugs
    }

    @CheckForNull public String checkForNull() {
        return null;
    }

    public static void main(String[] args) {
        System.out.println(new test().nullable().length()); // IDEA
        System.out.println(new test().nonnull().length());
        System.out.println(new test().checkForNull().length());
    }
}
于 2012-09-06T14:48:00.880 回答
5

IntelliJ Idea@javax.annotation.Nullable默认支持,任何取消引用@Nullable参数或返回值的尝试都会导致警告。

@alexander-pavlov,您可以添加@javax.annotation.CheckForNull“恒定条件和异常”检查的配置。转到文件->设置->检查->可能的错误->恒定条件和异常->配置注释。

我更喜欢这样做,因为它比他在上面的回答中提到的@lbalazscs@CheckForNull具有更明确的含义。@Nullable

于 2012-09-20T07:18:54.697 回答