我对这些注释的正确使用感到困惑。@NonNull和@Nullable的正确用法是什么?
android.support.annotation.NonNull;
android.support.annotation.Nullable;
为@NonNull
文档中的信息说:
表示一个参数,字段或方法的返回值不能为空。
这是什么意思在参数的情况下,当没有什么可以阻止你通过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
表示没有标题的,但是这是一个实现细节,所以我不想对设置和清除标题一个方法。
如果我标志着该领域title
为@Nullable
,机器人工作室告诉我,参数setTitle
也许应该被标记@Nullable
太(但这是我想的正好相反)。
如果我标志着参数为setTitle
方法@NonNull
我得到的警告条件title == null
总是false
。
在这种情况下,这些注释的正确用法是什么?如果@NonNull
意味着一个参数可以永远null
是错用它来指应该不null
?如果是,是否有正确的方法来表明这一点?
一般来说,检查仍然是必需的。注释有助于IDE了解合同。一些IDE进一步发展并产生运行时错误,虽然IDE的这种运行时检查是礼节性的,而不是要求。 –