[英]Best way to check if a reference is null in Java
我想知道什么是最好的方法來檢查我們是否在Java中有一個有效的引用。 我知道此語法有效,但令人難以置信。
if (myObj == null) {
// Do something knowing we have an object
}
我來自其他一些語言,這些語言使您可以像檢查c ++一樣檢查指針。
char* prt = null;
if (ptr) {
// We know we have a valid c-string
}
Java中是否有任何模棱兩可或類似的語法? 使用編譯器擴展或預處理程序我可以。
繼續跟進。 在開始討論之前,我開始談論為什么我應該只使用Java語法,因為您可能會忘記=
符號,請不要這么做。
if (myObj = null)
將被編譯器/ lint捕獲。
nullptr_t
Java沒有將nullptr_t
的類似物或指針類型的隱式轉換為bool
,因此您必須使用有點冗長的表示法
if (myObj == null)
而在C ++中,我們可以編寫
if (myObj)
在這方面,Java不太簡潔,而且可以說更清晰。
沒有捷徑語法可用於處理Java中的null
檢查,甚至沒有其他語言中可用的空合並或空傳播運算符。 也沒有用戶定義的轉換運算符,因此您將無法使用C ++慣用語,該慣用語使您無法在返回對象的表達式上編寫循環,例如while (cin >> x) { ... }
。
但是,Java 8中存在一個強大的替代方法,可以完全避免null
檢查:將可空對象包裝在Optional<T>
,並使用其方法隱藏空檢查。
這是一個簡短的示例:
String s = "Hello";
Optional<String> os = Optional.ofNullable(s);
os.ifPresent(x -> { System.out.println(x); });
上面打印 "Hello"
。 如果將s
設置為null
,則代碼將不打印任何內容。
if(x == null) {
doSomething();
}
...是Java中的通用習語。 Java的設計者決定不允許將非布爾型變量視為隱式“真實”值。
另一個常見的習慣用法是在三元語句中使用x == null
:
return x == null ? "not found" : x;
或使用標准方法在null早期引發異常:
Objects.requireNonNull(x);
更一般而言,嘗試采用一種編程樣式,在這種編程樣式中您永遠不會期望傳遞null,因此不必為這種可能性編寫代碼。
在非公共API上,由於您永遠不會傳遞null,因此您無需測試null(如果發生NullPointerException
,則傳遞null的人都可以自己負責混亂)。
在公共API中,在傳遞非null時驗證調用者是否有禮貌,但這在每種情況下都不是必不可少的。
一個合理的目標是始終期望輸入為非null,並且永遠不要返回null(因為Java 8,如有必要,請使用Optional
,或者采用Null Object Pattern )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.