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

标签 java xml equals graph-theory

如何找出导致 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/

相关文章:

java - java.util.Map对应的XML格式是什么?

java - null 是 Java 关键字吗?

Java 2D 游戏图 block 渲染优化

java - 来自 ObjectInputStream 构造函数的 EOFException

java - 枚举中的非法前向引用

android - 如何更改附加到导航 View 的子菜单的文本和图标的颜色?

ruby - Ruby 中我的 XML 之前的无效字符

java - 重写自定义类的哈希码和等于

java - 是什么让引用比较 (==) 对 Java 中的某些字符串起作用?

c++ - 等效范围的 STL 算法