2012-01-12 63 views
0

當爲我的某個類重寫equals屬性時,是否可以這樣實現它?如標識有問題的性質可能是字符串,布爾日期,設置,或LinkedHashSetJava按對象引用比較兩個屬性

public boolean equals(Object obj) 
{ 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 

    if (!compareProperty(identifier, other.getIdentifier())) return false; 
    //Continue for all properties 
} 

//Compares any two objects 
private boolean compareProperty(Object sourceObject, Object testObject) 
{ 
    if (sourceObject == null) 
    { 
     if (testObject != null) 
      return false; 
    } 
    else if(!sourceObject.equals(testObject)) 
    { 
     return false; 
    } 

    return true; 
} 

爲什麼或者爲什麼不呢?

+0

對不起,我沒有得到你,但過度騎等於????你不能重載String類的equals()方法,它是一個final類。你不能修改它的行爲。 – 2012-01-12 07:45:59

+0

對不起,如果我不清楚,建議您爲對象覆蓋默認的.equals方法,以便您的對象正確比較對象的實例。 – FooBar 2012-01-12 07:51:01

回答

2

這確實是應該做的。不過,我不會重新發明輪子。考慮使用Objects.equals(在Java 7中)或Objects.equal(在Guava中)或EqualsBuilder(在apache commons-lang中)。

+0

這正是我正在尋找的,謝謝 – FooBar 2012-01-12 07:53:36

+2

這些爲您省去指定自定義類的所有屬性的麻煩的唯一方法是EqualsBuilder.reflectionEquals(obj1,obj2)。其他人只檢查空值並使用正常的等值方法。但反射一如既往,可以觸發安全檢查報警,性能下降。我會堅持經典的做法,就像你一樣 – 2012-01-12 08:22:56