2013-05-05 75 views
-1

來自Apache Commons Lang庫的類EqualsBuilderHashCodeBuilder可用於對象比較目的。關於Apache Commons EqualsBuilder和HashCodeBuilder和空值

例如,一個可在兩個Person對象之間測試平等喜歡如下:

Person p1 =...; 
Person p2 =...; 
boolean equals = new EqualsBuilder(). 
     append(p1.name, p2.name). 
     append(p1.secondname, p2.secondname). 
     append(p1.surname, p2.surname). 
     append(p1.age, p2.age). 
     isEquals(); 

假設一個字段不是強制性的,例如secondname。 EqualsBuilder和HasCodeBuilder如何處理這個事實?比較是否在這個領域完成?或者空字段的比較可以作爲特殊選項跳過?

+0

嘿匿名英雄,請解釋你的downvote! – 2013-05-05 07:54:07

+1

這難道不是很容易測試嗎? (如果有文件記錄,這將是很好的,不過,也許你可以在檢查完行爲後發送補丁。) – 2013-05-05 08:00:47

+0

我理解你的觀點 – 2013-05-05 08:03:56

回答

3

如果它們都爲空,這兩種方法將認爲p1.namep2.name是相等的。這裏有免費的源代碼的相關部分:

public EqualsBuilder append(Object lhs, Object rhs) { 
    if (isEquals == false) { 
     return this; 
    } 
    if (lhs == rhs) { 
     return this; 
    } 
    ...