[英]Compare two objects with a check for null
JDK中是否有一個方法可以比較兩個對象的相等性,從而計算空值? 像這樣的東西:
public static boolean equals(Object o1, Object o2)
{
if (o1 == null)
{
return o2 == null; // Two nulls are considered equal
}
else if (o2 == null)
{
return false;
}
return o1.equals(o2);
}
自己編寫這個方法似乎很愚蠢,因為我認為它必須已經存在於某個地方。
Java 7.0添加了一個新的方便類: Objects
。
它有一個完全符合這個的方法: Objects.equals(Object a, Object b)
Apache Commons Lang有這樣一個方法: ObjectUtils.equals(object1,object2) 。 你不希望在這種方法上使用泛型,它會導致偽造的編譯錯誤,至少在一般情況下是這樣。 Equals非常清楚(或者應該 - 它是合同的一部分)來檢查對象的類並返回false,因此它不需要任何額外的類型安全性。
FWIW,這是我的實施:
private static boolean equals(Object a, Object b) {
return a == b || (a != null && a.equals(b));
}
在我的應用程序中,我知道a和b將始終是相同的類型,但我懷疑即使它們不是這樣也能正常工作,前提是a.equals()是合理實現的。
public static boolean equals(Object object1, Object object2) {
if (object1 == null || object2 == null) {
return object1 == object2;
}
return object1.equals(object2);
}
如果你擔心NullPointerExceptions,你可以測試相等,如:
if (obj1 != null && obj1.equals(obj2)) { ... }
equals()
的一般契約是非null對象永遠不應該等於null引用,並且如果要將對象與null引用進行比較(而不是拋出NPE),則equals()
方法應返回false 。
每當我遇到需求並認為“這是如此常見的Java必須擁有它”但發現它沒有,我檢查Jakarta Commons項目。 它幾乎總是有它。 快速搜索commons-lang API(具有最基本的常用實用程序)顯示了一個提供所需內容的equals()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.