gpt4 book ai didi

java - 找出导致 equals() 返回 false 的原因

转载 作者:行者123 更新时间:2023-11-29 09:40:24 26 4
gpt4 key购买 nike

如何找出导致 equals() 返回 false 的原因?

我不是在问一个确定的、总是正确的方法,而是在开发过程中提供帮助的东西。目前我必须进入 equals() 调用(通常是它们的树)直到其中一个为假,然后进入它,令人作呕。

我想到了使用对象图,将它输出到xml并比较两个对象。但是XMLEncoder需要默认构造函数,jibx需要预编译,x-stream和simple api在我的项目中没有用到。我不介意将单个类甚至一个包复制到我的测试区域并在那里使用它,但是为此导入整个 jar 是不可能的。

我也考虑过自己构建一个对象图遍历器,我可能仍然会这样做,但我不想开始处理特殊情况(有序集合、无序集合、映射...)

知道怎么做吗?

编辑:我知道添加 jar 是正常的处理方式。我知道 jar 是可重复使用的单元。然而,(在我的项目中)为此所需的官僚机构并不能证明结果的合理性 - 我会继续调试并介入。

最佳答案

这可能不是完整的图形比较...除非您的 equals 包括每个类中的每个属性...(您可以尝试 == :))

尝试 hamcrest matchers - 您可以将每个匹配器组成一个“全部”匹配器:

Matcher<MyClass> matcher = CoreMatchers.allOf(
HasPropertyWithValue.hasProperty("myField1", getMyField1()),
HasPropertyWithValue.hasProperty("myField2", getMyField2()));
if (!matcher.matches(obj)){
System.out.println(matcher.describeFailure(obj));
return false;
}
return true;

它会说类似这样的话:“期望 myField1 的值是“值”但是是“不同的值””

当然你可以内联静态工厂。这比使用 apache-commons EqualsBuilder 重一点,但它确实可以准确描述失败的原因。

您可以创建自己的专用匹配器来快速创建这些表达式。复制 apache-commons EqualsBuilder 是明智的在这里。

顺便说一句,hamcrest basic jar 是 32K(包括源代码!),让您可以选择审查代码并对您的老板说“我会把它当作我自己的代码”(我认为这是您的导入问题) .

关于java - 找出导致 equals() 返回 false 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636360/

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