我看到了一些Java中的方法聲明爲:@Nullable註解的使用
void foo(@Nullable Object obj)
{ ... }
什麼的@Nullable
這裏的含義是什麼?這是否意味着輸入可能是null
? 沒有註解,輸入仍然可以爲空,所以我猜這不僅僅是它?
感謝
我看到了一些Java中的方法聲明爲:@Nullable註解的使用
void foo(@Nullable Object obj)
{ ... }
什麼的@Nullable
這裏的含義是什麼?這是否意味着輸入可能是null
? 沒有註解,輸入仍然可以爲空,所以我猜這不僅僅是它?
感謝
此註解通常用於消除NullPointerExceptions
。 @Nullable
經常說這個參數可能是null
。這種行爲的好例子可以在Google Guice中找到。在這個輕量級的依賴注入框架中,你告訴這個依賴關係可能是null
。如果你試圖通過null
而沒有註釋,框架會拒絕做它的工作。
什麼是@Nullable
可能與@NotNull
註釋一起使用。在這裏你可以用find一些提示如何正確使用它們。 IntelliJ中的代碼檢查會檢查註釋並幫助調試代碼。
不同的工具可能會不同地解釋@Nullable
的含義。例如,Checker Framework和FindBugs句柄@Nullable
differently。
用@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
一個實例。卜該實例可以Null
從下面的答案,我已經瞭解到,註釋指示空值是可以接受的,它是用來在那裏的例子,代碼分析器我可以嘗試和解釋可能會有所不同。看看爲什麼這個格式是好的? + 1s,特別是提出這個問題。 – icedwater
哪個庫在你的問題的上下文中提供'@ Nullable'?它是[Checker?](https://checkerframework.org/manual/#nullness-checker) – 8bitjunkie