有沒有辦法讓兩個對象相等?如何將java中的兩個對象等同起來
我知道我們可以使用equals,但問題是我需要編寫一個實用程序來比較實現相同接口的任何兩個對象。
現在對象可以有1個屬性或2個屬性或可以有100個屬性。我需要比較每個屬性以證明它們完全相等。
有沒有辦法讓兩個對象相等?如何將java中的兩個對象等同起來
我知道我們可以使用equals,但問題是我需要編寫一個實用程序來比較實現相同接口的任何兩個對象。
現在對象可以有1個屬性或2個屬性或可以有100個屬性。我需要比較每個屬性以證明它們完全相等。
見你可能有一個看Apache的百科全書輔助類EqualsBuilder和HashCodeBuilder。這些類爲任何類提供方法來構建好方法equals
和hashCode
。
這可以使用反射來完成。如果你不想編寫你自己的工具,你可以使用類似Unitils的東西,它提供了一個名爲ReflectionAssert的類。
也Is there a Java reflection utility to do a deep comparison of two objects?
如果你不想實現equals或者比較器,你可以嘗試通過反射來實現。
遍歷兩個對象的字段,並比較他們 -
Field[] fields1 = o1.getClass().getDeclaredFields();
Field[] fields2 = o2.getClass().getDeclaredFields();
for (int i = 0; i++ ; i>fields.lenght) {
// compare the two fields under the assumption that if the two
// objects are the same their fields will be the same in each iteration
}
使用field.get(Object)
檢索領域
的價值由於有可能是嵌套和所涉及對象的集合,你必須對每個元素遞歸地執行,並且指針循環可能會出現問題。所以如果你期待週期,你將不得不實現更復雜的解決方案(你將不得不存儲實際的指針,並檢查你沒有試圖遞歸比較相同的元素兩次)。
這並不容易。你如何處理嵌套集合?你如何確保你不是在一個循環中結束?實現這不是微不足道的...... – nwinkler 2012-02-29 13:20:59
關於比較集合 - 這個比較應該遞歸地爲每個元素完成(或者使用它的equals實現)。關於週期 - 這是一個問題。如果你期望週期,你不應該使用這種方法(雖然有一個解決方案:解決記憶問題,但它很醜) – 2012-02-29 13:37:06
使用比較器接口。 – 2012-02-29 11:59:40
您可以嘗試使用反射來迭代兩個對象屬性並進行比較。 (在你的問題中暗示你不執行平等或比較...) – 2012-02-29 12:00:43
@Ido。 CO:請舉例說明如何做同樣的事情。我知道如何使用反射,但不知道如何做到這一點。 – 2012-02-29 12:08:43