有兩個similiar問題上的SO:深遞歸對象比較(再次)
Is there a Java reflection utility to do a deep comparison of two objects?
Deep reflective compare equals
,但它是有趣的,他們沒有給出完全正確的答案的問題。
我和其他問題的作者真正想要的,是在一些圖書館,這將只是告訴給出了兩個對象相同或不是一些方法:
boolean deepEquals(Object obj1, Object obj2)
即沒有拋出任何異常等。
apache
的EqualsBuilder
不是這樣,因爲它沒有深入的比較。
Unitils
似乎也是不好的決定,因爲它的方法不返回true
或false
;如果比較失敗,它只會引發異常。當然,它也可以使用這樣的:
Difference difference = ReflectionComparatorFactory.createRefectionComparator(new ReflectionComparatorMode[]{ReflectionComparatorMode.LENIENT_ORDER, ReflectionComparatorMode.IGNORE_DEFAULTS}).getDifference(oldObject, newObject);
,但它似乎很醜陋,unitils
庫完全好像是太難爲需要比較的目的。
此外,如何自行創建這樣的deepEquals
是非常清楚的,但是不太可能沒有包含已經實現的方法的常用庫。有任何想法嗎?
遞歸比較不是微不足道的。看一下'EqualsBuilder.reflectionEquals'方法 - 讓我們指定在使用繼承時哪些字段不能進行比較以及在類層次結構樹中到達多遠。現在如果你有一個嵌套的對象,你也想用反射來比較,你怎麼知道要忽略哪些字段?如果你不在乎,那麼包裝'EqualsBuilder'實現很簡單,以實現你所需要的。否則,您可能需要使用註釋或註冊表來告訴哪些類不能比較哪些字段。 – krzychu 2017-03-20 06:47:22