gpt4 book ai didi

java - 如果您的对象仅由接口(interface)组成,如何定义 hashcode 和 equals?

转载 作者:行者123 更新时间:2023-11-30 02:55:58 26 4
gpt4 key购买 nike

假设我有一个小(java)类,它仅由 3 个接口(interface)对象组成。这 3 个对象共同构成了 map 的键值。现在我的问题是:如何为该类定义 equals 和 hashcode ?我的意思是,该类的所有成员都只是不实现任何内容的接口(interface)?

示例:

class SomeKey {
public SomeKey(SomeWeiredInterface1 a, SomeWeiredInterface2 b, SomeWeiredInterface3 c){
....
}
}

最直接的方法是:

public boolean equals(Object other){
SomeKey otherKey = (SomeKey)other;

return a.equals.otherKey.a && b.equals.otherKey.b && c.equals.otherKey.c;
}

对我来说,这看起来根本不可能,或者至少我必须自己编写这些方法,因为我无法使用(或委托(delegate))这些接口(interface)的实现的任何 hashcode 或 equals 方法?

感谢您的任何提示!托尔斯滕

最佳答案

所有接口(interface)都隐式声明 Object 类中的所有公共(public)方法(请参阅 JLS § 9.2 )。您可以调用接口(interface)类型的 equals 和 hashCode 方法,它将调用实现该接口(interface)的任何具体类中的重写方法,或者它将调用这些方法继承自Object

你可以用同样的方式编写SomeKeyequalshashCode方法,而不管字段类型是类还是接口(interface):

@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof SomeKey)) return false;
SomeKey other = (SomeKey)o;
return a.equals(other.a) && b.equals(other.b) && c.equals(other.c);
}

@Override
public int hashCode() {
return java.util.Objects.hash(a.hashCode(), b.hashCode(), c.hashCode());
}

关于java - 如果您的对象仅由接口(interface)组成,如何定义 hashcode 和 equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37196702/

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