Pau*_*ton 7 java android annotations
我对这些注释的正确使用感到困惑.
android.support.annotation.NonNull;
android.support.annotation.Nullable;
Run Code Online (Sandbox Code Playgroud)
文档中的信息@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;
}
}
Run Code Online (Sandbox Code Playgroud)
这里我null用来表示标题的缺失,但这是一个实现细节,所以我不想要一种方法来设置和清除标题.
如果我将该字段标记title为@Nullable,android studio告诉我该参数setTitle应该也应该被标记@Nullable(但这与我想要的相反).
如果我将参数标记到setTitle方法,因为@NonNull我得到一个警告条件title == null总是false.
在这种情况下,这些注释的正确用法是什么?如果@NonNull指的是参数可以永远null是错用它来指应该不会null?如果是,是否有正确的方法来表明这一点?
关键是这个注释是某种契约,所以你不需要检查你的方法是否正确注释。Android Studio 会检查您是否没有弄乱它。您仍然可以忽略它,但这将导致编译器警告。
如果您忽略无用的(根据合同)安全检查,它将正确抛出空指针异常。但开发人员收到了您的注释的警告。
| 归档时间: |
|
| 查看次数: |
3855 次 |
| 最近记录: |