如何在java中等同两个对象

时间:2012-02-29 11:56:56

标签: java equals

有没有办法可以将两个物体等同起来?

我知道我们可以使用equals,但问题是我需要编写一个实用程序,它可以比较实现相同接口的任何两个对象。

现在,对象可以有1个属性,或2个属性,或者可以有100个属性。我需要比较每个属性,以证明完全相同。

3 个答案:

答案 0 :(得分:2)

您可以查看 Apache Commons 帮助程序类EqualsBuilderHashCodeBuilder。这些类提供了为任何类构建良好equalshashCode方法的方法。

答案 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)检索字段的值

由于可能涉及嵌套和对象集合,因此您必须以递归方式为每个元素执行此操作,并且指针循环可能会出现问题。因此,如果你期望循环,你将不得不实现更复杂的解决方案(你必须存储实际的指针。并检查你是不是试图递归地比较相同的元素两次)。