And*_*niy 10 java reflection compare
SO上有两个类似的问题:
但是,很有趣,他们都没有给出完全正确的答案.
我和其他问题的作者真正想要的是,某些库中的一些方法只会告诉两个对象是否相等:
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通过self 创建这样的,但是不太可能没有包含已经实现的方法的常用库.有任何想法吗?
Java 1.7 有Objects.deepEquals(Object a, Object b)
不幸的是,Unitils该类ReflectionAssert没有返回trueor的附带方法false。你可以试试:
https://github.com/jdereg/java-util
其DeepEquals类具有DeepEquals.deepEquals(Object a, Object b)和DeepEquals.deepHashCode(Object o)方法,您可以使用它们来覆盖您的类的equals和hashCode方法或在外部Comparator或Equivalence.
注意:此 DeepEquals 实现有一个限制。如果该类具有用户定义的重写 equals 方法,则该方法将优先。