gpt4 book ai didi

java - 跟踪类问题的良好设计模式是什么?

转载 作者:行者123 更新时间:2023-11-30 06:01:55 25 4
gpt4 key购买 nike

我有一个具有自定义 equals() 方法的类。当我使用 equals 方法比较两个对象时,我不仅对它们是否相等感兴趣,而且对它们不相等时有什么不同感兴趣。最后,我希望能够挽回因不平等情况而产生的差异。

我目前使用日志记录来显示我的对象不相等的位置。这是可行的,但我有一个新的要求,即能够提取等于检查的实际结果以便稍后显示。我怀疑有一种面向对象的设计模式可以处理这种情况。

public class MyClass {
int x;
public boolean equals(Object obj) {
// make sure obj is instance of MyClass
MyClass that = (MyClass)obj;

if(this.x != that.x) {
// issue that I would like to store and reference later, after I call equals
System.out.println("this.x = " + this.x);
System.out.println("that.x = " + that.x);
return false;
} else {
// assume equality
return true
}
}
}

是否有任何好的设计模式建议,其中正在完成某种工作,但辅助对象收集有关该工作完成情况的信息,以便稍后检索和显示?

最佳答案

您的问题是您正在尝试使用 boolean equals(Object) API 来执行其设计目的之外的操作。我认为没有任何设计模式可以让您做到这一点。

相反,你应该这样做:

public class Difference {
private Object thisObject;
private Object otherObject;
String difference;
...
}

public interface Differenceable {
/** Report the differences between 'this' and 'other'. ... **/
public List<Difference> differences(Object other);
}

然后为所有需要“可区分”功能的类实现此功能。例如:

public class MyClass implements Differenceable {
int x;
...

public List<Difference> differences(Object obj) {
List<Difference> diffs = new ArrayList<>();
if (!(obj instanceof MyClass)) {
diffs.add(new Difference<>(this, obj, "types differ");
} else {
MyClass other = (MyClass) obj;
if (this.x != other.x) {
diffs.add(new Difference<>(this, obj, "field 'x' differs");
}
// If fields of 'this' are themselves differenceable, you could
// recurse and then merge the result lists into 'diffs'.
}
return diffs;
}
}

关于java - 跟踪类问题的良好设计模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56403511/

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