加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – @NonNull和@Nullable的正确用法是什么?

发布时间:2020-12-15 00:52:41 所属栏目:Java 来源:网络整理
导读:我对这些注释的正确使用感到困惑. android.support.annotation.NonNull;android.support.annotation.Nullable; @NonNull文档中的信息说: Denotes that a parameter,field or method return value can never be null. 在参数的情况下,这意味着什么,什么都没
我对这些注释的正确使用感到困惑.
android.support.annotation.NonNull;
android.support.annotation.Nullable;

@NonNull文档中的信息说:

Denotes that a parameter,field or method return value can never be null.

在参数的情况下,这意味着什么,什么都没有阻止你传递null?

例如,假设我有一个MyObject类,并且一个实例可能有也可能没有标题.

public final class MyObject {

    private String title = null;

    public void setTitle(String title) {
        if (title == null)
            throw new NullPointerException();
        this.title = title;
    }

    public void clearTitle() {
        title = null;
    }
}

这里我使用null来表示缺少标题,但这是一个实现细节,所以我不想要一个方法来设置和清除标题.

如果我将字段标题标记为@Nullable,android studio告诉我setTitle的参数也应该标记为@Nullable(但这与我想要的相反).

如果我将setTitle方法的参数标记为@NonNull,我会收到警告条件title == null始终为false.

在这种情况下,这些注释的正确用法是什么?如果@NonNull意味着参数永远不能为null,那么使用它来表示不应该为空是错误的吗?如果是,是否有正确的方法来表明这一点?

解决方法

关键是这个注释是某种契约,所以如果你正确地宣布你的方法,你就不需要进行检查. Android Studio会检查您是否不熟悉它.您仍然可以忽略它,但这会导致编译器警告.

如果省略无用(通过合同)安全检查,它将正确抛出nullpointerexceptions.但开发人员收到了您的注释警告.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读