我对这些注释的正确使用感到困惑.
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.但开发人员收到了您的注释警告.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。