我對這些註釋的正確使用感到困惑。@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的這種運行時檢查是禮節性的,而不是要求。 –