java - nonnull - @nullable作用
@Nullable註釋用法 (3)
不同的工具可能會以不同的方式解釋@Nullable
的含義。 例如, Checker Framework和FindBugs處理@Nullable
differently 。
我看到java中的一些方法聲明為:
void foo(@Nullable Object obj)
{ ... }
@Nullable
的含義是@Nullable
? 這是否意味著輸入可能為null
? 沒有註釋,輸入仍然可以為空,所以我猜這不僅僅是它?
謝謝
它明確表示該方法接受空值,並且如果重寫該方法,則還應該接受空值。
它也可以作為FindBugs類的代碼分析器的提示。 例如,如果這種方法首先不檢查空值而解引用其參數,則FindBugs將發出警告。
用@Nullable
聲明空值的元素對於返回(對於方法),傳遞給(對於參數)和保持(對於局部變量和字段)是完全有效的。
用@NotNull
註解的元素聲明為空值禁止返回(對於方法),傳遞給(對於參數)並保持(對於局部變量和字段)。
在覆蓋/實現帶註釋聲明或參數的方法時, @Nullable
和@NotNull
之間存在協變關係。
用註釋聲明覆蓋/實現方法:
- 父方法的
@NotNull
註釋需要
子類方法的@NotNull
註釋。 - 在父方法中使用
@Nullable
註釋的方法可以在子類方法中擁有@Nullable
或@NotNull
註釋。
使用帶註釋參數覆蓋/實現方法:
- 父方法中參數的
@Nullable
註釋需要子類方法參數的@Nullable
註釋。 - 在父方法中使用參數的
@NotNull
註釋的方法對於子類方法參數可以具有@Nullable
或@NotNull
註釋(或不包含它們)。
例:
@Nullable
public static UserContext getThreadUserContext() {
TransactionParms tp = TransactionParms.getBoundParms();
return (tp == null) ? null : tp.getUserContext();
}
這裡getThreadUserContext
方法必須返回一個TransactionParms
的實例。 Bu那個實例可能是Null