有没有办法可以将两个物体等同起来?
我知道我们可以使用equals,但问题是我需要编写一个实用程序,它可以比较实现相同接口的任何两个对象。
现在,对象可以有1个属性,或2个属性,或者可以有100个属性。我需要比较每个属性,以证明完全相同。
答案 0 :(得分:2)
您可以查看 Apache Commons 帮助程序类EqualsBuilder和HashCodeBuilder。这些类提供了为任何类构建良好equals
和hashCode
方法的方法。
答案 1 :(得分:0)
这可以使用反射来完成。如果您不想编写自己的实用程序,可以使用Unitils之类的内容,它提供了一个名为ReflectionAssert的类。
另见Is there a Java reflection utility to do a deep comparison of two objects?
答案 2 :(得分:0)
如果您不想实现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)
检索字段的值
由于可能涉及嵌套和对象集合,因此您必须以递归方式为每个元素执行此操作,并且指针循环可能会出现问题。因此,如果你期望循环,你将不得不实现更复杂的解决方案(你必须存储实际的指针。并检查你是不是试图递归地比较相同的元素两次)。