在Android Studio中使用@NonNull注释的正确方法

时间:2015-09-18 12:46:20

标签: java android annotations non-nullable

我想在Android中使用@NonNull注释,但我无法找到正确的方法。 我建议你这个例子:

public void doStuff(@NonNull String s){
     //do work with s...    
}

所以当我打电话给doStuff(null)时,IDE会给我一个警告。问题是我不能依赖这个注释,因为像this问题指出的那样,它们不会传播得很远。所以我想对我的方法进行空检查,如下所示:

 if(s==null) throw new IllegalAgrumentException();

但假设s!=null,IDE会警告我s==null总是假的。我想知道最好的方法是什么。

我个人认为应该有@ShouldntBeNull这样的注释检查并警告null不会传递给它,但不会当值为空检查时抱怨。

2 个答案:

答案 0 :(得分:12)

您可以使用Objects.requireNonNull。它将在内部进行检查(因此IDE不会在您的函数上显示警告)并在参数为null时引发NullPointerException

public MyMethod(@NonNull Context pContext) {
    Objects.requireNonNull(pContext);
    ...
}

如果您想抛出另一个异常或使用API​​级别< 19,那么你可以只做自己的helper-class来实现相同的检查。 e.g。

public class Check {
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new IllegalArgumentException();
        return obj;
    }
}

并像这样使用它:

public MyMethod(@NonNull Context pContext) {
    Check.requireNonNull(pContext);
    ...
}

答案 1 :(得分:7)

Google examples按以下方式执行

import static com.google.common.base.Preconditions.checkNotNull;

...

public void doStuff(@NonNull String sParm){
     this.sParm= checkNotNull(s, "sParm cannot be null!");
}