gpt4 book ai didi

java - 比较两个复杂对象时如何返回比较差异?

转载 作者:行者123 更新时间:2023-11-29 03:46:50 27 4
gpt4 key购买 nike

我必须比较两个不同类型的复杂对象(并且在类型层次结构中没有公共(public)父类(super class))但逻辑上它们可能是等价的。问题是在对象不相等的情况下如何返回有关比较结果的信息;我想告诉调用者为什么对象不相等(哪些字段不同,它们有什么不同)。

到目前为止的选项是:

  • 返回一个字符串
  • 抛出异常

但我觉得它们不是很优雅/很好。

此外,是否有一种方法可以将字段比较委托(delegate)给 JUnit 的 assertEquals,从而使我的比较基于 JUnit 而无需将比较测试作为实际的单元测试?

最佳答案

如果比较很复杂,则比较的结果(如您所述)可能很复杂。

因此,我建议您考虑第三种选择:创建一个自定义类 ComparisonResult,它封装了结果的信息。

您甚至可以创建一个小层次结构,并依靠多态性来简化代码。这是一个例子:

ComparisonResult
|
+--- Equals
|
+--- Not equals
|
+--- Compatible (with "isAbeforeB()")
|
+--- Incompatible (with "getReason()")

Incompatible 大概是最困惑的类,我建议您通过对象不兼容的原因列表来实​​现它。原因本身可能是一个抽象类,具有子类,例如 MissingField 等。

关于java - 比较两个复杂对象时如何返回比较差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10511767/

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