2013-08-30 74 views
0

假設一個class Member其中成員有Id類型String。我想知道在另一個實現中使用String equals()實現是否會有任何問題。如果field IdLong類型,會更好嗎?在另一個equals()實現中使用String的equals()實現?

@Override public boolean equals(Object object){ 
    if(object == null) return false; 
    if(! (object instanceof Member)) return false; 
    Member member= (Member) object; 
    if(this.Id.equals(member.Id)) //<==My concern is here 
     return true; 
    else 
     return false; 
} 
+2

你爲什麼認爲這會有什麼問題?運行它時你遇到過嗎? –

+5

只要this.Id永遠不會爲null,你應該沒問題。按照慣例,它應該是「id」,而不是「Id」。 –

+0

你應該使用'Objects.equals(Id,member.Id)'。除此之外,沒關係。 – nosid

回答

1

我看到的唯一問題是,你可能有多個類的成員除了id和你equals實施會說true即使在兩種情況有很大的不同,但有相同的id。考慮到這一點,請確保一致地執行hashCode實施以避免不一致。

另一個想法是定義自定義比較器例如

static Comparator<Member> MEMBER_ID_COMPARATOR = new Comparator<Member>() { 
    @Override 
    public int compare(Member first, Member second) { 
     assert(first.getId() != null); 
     assert(second.getId() != null); 
     return first.getId().compareTo(second.getId()); 
    } 
} 
0

沒問題。從這個角度來看,請將Id作爲String。如果它只包含數字,是的,您可以使用LongBigInteger(我的偏好)。但這是一個不同的動物。

0

試試這個

@Override public boolean equals(Object object){ 
    if(object == null) return false; 
    if(! (object instanceof Member)) return false; 
    Member member= (Member) object; 
    if (this.Id == null && member.Id == null) 
     return true; 
    else if (this.Id != null && member.Id != null) 
     return this.Id.equals(member.Id); 
    else 
     return false; 
} 
+0

'this.Id == null && member.Id == null'可以被重寫爲'this.Id == member.Id' – McDowell

0

如果字段與包裝類(整數,布爾,等等),實現

然後實現平等的比較簡單,因爲只有一個case:遞歸地調用equals方法。

在等號方法中,通常值得對字段比較進行排序,以便首先執行最重要的比較。也就是說,應該首先評估最有可能不同的領域。

這允許「短路」邏輯運算符最小化執行時間。

相關問題