深反射比较等于

How*_*May 14 java reflection comparison serialization equals

我试图通过比较结果对象与原始对象来验证序列化和反序列化例程.例程可以序列化任意和深度嵌套的类,因此我想要一个比较例程,可以给出原始和最终实例,并反过来遍历每个值类型并比较值,并迭代地潜入引用类型以比较值.

我已经尝试了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);
}
Run Code Online (Sandbox Code Playgroud)

art*_*tol 13

从这个问题的答案/sf/answers/101433601/和一些初步测试,看起来像Unitils' ReflectionAssert.assertReflectionEquals做你期望的.(编辑:但可能会被放弃,所以你可以试试AssertJ https://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#field-by-field-recursive)

我对EqualsBuilder的这种行为感到非常震惊,所以感谢这个问题.在这个网站上有很多答案推荐它 - 我想知道推荐它的人是否意识到这样做了?

  • 应该修改javadoc以使其更清晰. (2认同)