gpt4 book ai didi

java - 实现 hashcode 和 equal 的责任

转载 作者:行者123 更新时间:2023-12-01 19:40:29 25 4
gpt4 key购买 nike

我有一个名为“工作”的界面

public class interface Work {
boolean completeWork(Job j);
}

然后我有一个复合类

public class CompositeWork implements Work {
private Set<Work> childWork = new HashSet<>();
public boolean completeWork(Job j) {
return childWork.stream().allMatch(w -> w.completeWork(j));
}
public void addWork(Work w) {
childWork.add(w);
}
}

我有以下不同的工作类型:

public class EasyWork implements Work {
public boolean completeWork(Job j) {
<do some work>
}
}

public class HardWork implements Work {
private String id;
public Hardwork(String id) {
this.id = id;
}
public boolean completeWork(Job j) {
<do some work>
}
}

客户端填充 CompositeWork 像这样

public class Client {
public static void main(String[] args) {
CompositeWork workHolder = new CompositeWork();
workHolder.add(new EasyWork());
workHolder.add(new EasyWork());
workHolder.add(new HardWork("1"));
workHolder.add(new HardWork("2"));
}
}

强制 childWork 的唯一性在CompositeWorkHashSet<>()我在哪里实现hashcode()equals()

工作界面会出现这种情况吗?
CompositeWork 类?
或者是在 EasyWork 和 HardWork 内部实现的?

最佳答案

我们无法回答您的问题。这取决于您希望类的行为方式。

任何类的默认行为是不同的实例彼此比较不相等。如果您同意所有 EasyWork 对象都是不同的,并且所有 HardWork 对象都是不同的,即使它们包含相同的数据,那么您不需要执行任何操作。 默认方法就足够了。

否则,您应该具体情况具体分析检查每个类:

  • 如果您希望 HardWork 对象在具有相同 id 的情况下相等,那么您需要重写 equals( )HardWork 中的 hashCode()。如果没有,请不要打扰。

  • 同样,如果 EasyWork 对象应该彼此相等,那么您也需要在那里覆盖它们。如果没有,请不要打扰。

  • 此外,如果您希望 CompositeWork 对象在具有相同 Set 子对象的情况下彼此相等,那么您也应该在那里重写它们。如果没有,请不要打扰。

关于java - 实现 hashcode 和 equal 的责任,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55543551/

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