java - nonnull - @nullable作用




@Nullable註釋用法 (3)

不同的工具可能會以不同的方式解釋@Nullable的含義。 例如, Checker FrameworkFindBugs處理@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





annotations