首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android Studio中使用@NonNull注释的正确方法

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

Stack Overflow用户
提问于 2015-09-18 20:46:20
回答 3查看 13.4K关注 0票数 27

我想在安卓系统中使用@NonNull注解,但我想不出正确的方法。我给你举个例子:

代码语言:javascript
复制
public void doStuff(@NonNull String s){
     //do work with s...    
}

因此,当我调用doStuff(null)时,集成开发环境会给我一个警告。问题是我不能依赖这个注解,因为就像this问题指出的那样,它们不会传播很远。因此,我想对我的方法进行null检查,如下所示:

代码语言:javascript
复制
 if(s==null) throw new IllegalAgrumentException();

但是集成开发环境会警告我s==null总是假的,假设是s!=null。我想知道做这件事最好的方法是什么。

我个人认为应该有一个像@ShouldntBeNull这样的注释,它只检查并警告null没有传递给它,而不会在值被null检查时发出警告。

EN

回答 3

Stack Overflow用户

发布于 2016-10-03 17:50:55

为此,您可以使用Objects.requireNonNull。它将在内部执行检查(以便集成开发环境不会显示有关您的函数的警告),并在参数为null时引发NullPointerException

代码语言:javascript
复制
public MyMethod(@NonNull Context pContext) {
    Objects.requireNonNull(pContext);
    ...
}

如果你想抛出另一个异常或者使用API级别< 19,那么你可以创建你自己的helper-class来实现同样的检查。例如:

代码语言:javascript
复制
public class Check {
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new IllegalArgumentException();
        return obj;
    }
}

像这样使用它:

代码语言:javascript
复制
public MyMethod(@NonNull Context pContext) {
    Check.requireNonNull(pContext);
    ...
}
票数 13
EN

Stack Overflow用户

发布于 2016-12-09 10:44:25

Google examples按如下方式进行操作

代码语言:javascript
复制
import static com.google.common.base.Preconditions.checkNotNull;

...

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

Stack Overflow用户

发布于 2015-09-20 07:45:35

您可以使用注释样式抑制来禁用该特定的null检查警告,例如:

代码语言:javascript
复制
    public MyMethod(@NonNull Context pContext) {
        //noinspection ConstantConditions
        if (pContext == null) {
            throw new IllegalArgumentException();
        }
        ...
    }

您每次执行此操作时都需要该//noinspection ConstantConditions

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32652402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档