有两个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