gpt4 book ai didi

java - 深度反射(reflection)比较等于

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:23 24 4
gpt4 key购买 nike

我试图通过将结果对象与原始对象进行比较来验证序列化和反序列化例程。这些例程可以序列化任意和深层嵌套的类,因此我想要一个比较例程,它可以被赋予原始和最终实例,并反射性地遍历每个值类型并比较值,并迭代地深入到引用类型以比较值。

我试过 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);
}

最佳答案

从这个问题的答案https://stackoverflow.com/a/1449051/116509从一些初步测试来看,Unitils 的 ReflectionAssert.assertReflectionEquals 似乎符合您的预期。 (编辑:但可能会被放弃,所以你可以试试 AssertJ https://assertj.github.io/doc/#assertj-core-recursive-comparison )

2021 年编辑:EqualsBuilder 现在有一个 testRecursive 选项。然而,提到的单元测试库会给你一个更好的失败消息来帮助调试,所以根据上下文,它们仍然是最好的选择。

关于java - 深度反射(reflection)比较等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com