我想通过比较生成的对象与原始对象来验证序列化和反序列化例程。例程可以序列化任意深度嵌套的类,因此我想要一个比较例程,它可以给出原始和最终实例,并反射地遍历每个值类型并比较值并迭代地跳入引用类型以比较值。深度反射比较等于
我已经试过了Apache Commons Lang中EqualsBuilder.reflectionEquals(inst1, inst2)
但是这似乎并没有做了非常深刻的比较,它只是为平等而不是跳水比较引用类型深入到他们:
下面的代码说明我的问题。第一次调用reflectionEquals
返回true,但第二次返回false。
是否有任何人可以推荐的图书馆常规?
class dummy {
dummy2 nestedClass;
}
class dummy2 {
int intVal;
}
@Test
public void testRefEqu() {
dummy inst1 = new dummy();
inst1.nestedClass = new dummy2();
inst1.nestedClass.intVal = 2;
dummy inst2 = new dummy();
inst2.nestedClass = new dummy2();
inst2.nestedClass.intVal = 2;
boolean isEqual = EqualsBuilder.reflectionEquals(inst1.nestedClass, inst2.nestedClass);
isEqual = EqualsBuilder.reflectionEquals(inst1, inst2);
}
如果反射等于只是比较引用,那么它有一个错误。它应该做的比这更多。 – DwB 2012-03-09 11:04:17
@DwB我怀疑代码的意图是允许您在特定的类中反射性地实现equals()。这与我想要反映的两个对象实例不同。在这种情况下,它不是一个错误,而是一种失望! – 2012-03-09 11:11:30
我失去了半天,EqualsBuilder这种弱无证行为。如果传递对象的字段是非基元,则builde rjust调用object.equals()。非常令人失望和无用。 – AlexWien 2014-03-03 17:36:40