問題:@Nullable 注解的用法
我看到java中的一些方法聲明為:
void foo(@Nullable Object obj){…}
在這里@Nullable是什么意思?這是不是意味著輸入可以為空?
沒有這個注解,輸入仍然可以是null,所以我猜這不是它的用法?
回答一
它清楚地說明了這個方法接受空值,而且如果你重寫該方法,你也應該接受空值。
它也可以作為像FindBugs這樣的代碼分析器的提示。例如,如果這樣一個方法不首先檢查空值就間接引用它的參數,FindBugs就會發出警告。
回答二
這個注解通常用于消除空指針異常。@Nullable表明該參數可能為null。一個很好使用例子就是谷歌Guice。在這個輕量級依賴注入框架中,你可以說明這個依賴項可能是空的。如果你試圖在沒有注解的情況下傳遞空值,這個框架就不會執行它的工作。
更重要的是@Nullable可以與@NotNull注解一起使用。在這里你可以找到一些正確使用它們的提示。IntelliJ中的代碼檢查也可以檢查注解并且幫助調試代碼。
回答三
當然,這里肯定有不同的想法,我的想法是,我不能強制“永遠不要傳遞空值”,因為我在處理不可控制的第三方的東西,例如API調用的東西,數據庫的記錄,之前程序員的東西等。所以我偏執地抗拒這種方法。因為你使用的是Java8或更高版本,有一種比if代碼塊更簡潔的方法。
public String foo(@Nullable String mayBeNothing) {return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}
你也可以通過交換.orelse
到orElseThrow(() -> new exception (" don ' send a null"))
的位置來拋出一些異常。
如果你不想使用不會添加任何功能的@Nullable,為什么不直接將參數命名為mayB。所以你的想法是很清楚的。
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/14076296/nullable-annotation-usage