這是Java的一個不幸的方面是引用可null
並沒有辦法,因爲它們不是語言來指定。
所以一般情況是這樣,不要對null
做出解釋,也不要陷入以後可能會拋出NPE的情況。
JSR305(現已失效)允許您註釋參數聲明,他們不應該給予null
秒。
void fn(@Nonnull String a, @Nonnull Integer b, @Nonnull Object c) {
冗長,但是這是Java的爲您服務。還有其他的註釋庫和檢查器的功能差不多,但都不是標準的。
(備註大寫:當窗體「非物」的駱駝外殼也就是說,standard不是大寫航線字,除非它是一個類的名稱,以便nonthing
和nonnull
)
除了運行檢查程序之外,註釋也不會實際執行規則。您可以靜態地包括一種方法做檢查:
public static <T> T nonnull(T value) {
if (value == null) {
throwNPE();
}
return value;
}
private static void throwNPE() {
throw new NullPointerException();
}
返回的值是很方便的在構造函數:
import static pkg.Check.nonnull;
class MyClass {
@Nonnull private final String thing;
public MyClass(@Nonnull String thing) {
this.thing = nonnull(thing);
}
...
的[?在哪裏檢查對象爲空或不是]可能重複(http://stackoverflow.com/questions/706263/where-to-check-if -an-object-is-null-or-not) – NPE 2011-03-02 20:23:04
另一個問題是關於'.net',但實質上是完全相同的。 – NPE 2011-03-02 20:24:04
目前的答案都沒有提到使用註釋和靜態分析,例如FindBugs @NonNull,@CheckForNull等。另外,雖然這不是上面提到的.Net問題的重複,但它可能至少在stackoverflow中覆蓋過一次。 – 2011-03-02 20:48:39