gpt4 book ai didi

java - 在接口(interface)中执行 "equals"

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:43 24 4
gpt4 key购买 nike

我有一个接口(interface),我希望每个实现这个接口(interface)的人都实现一个重写的“equals”方法。

有没有办法确保发生这种情况?

我猜这会发生的方式是实现我的接口(interface)的类将自动从 Object 获取 equals,从而使接口(interface)快乐。

最佳答案

不行,你只能创建一个抽象类而不是像这样的接口(interface):

public abstract class MyApi {

public final boolean equals(Object other) {
if (other == this) {
return true;
}
if (other instanceof MyApi) {
return equals((MyApi)other);
}
return false;
}

protected abstract boolean equals(MyApi other);

}

或更简单的版本:

public abstract class MyApi {

public boolean equals(Object other) {
throw new UnsupportedOperationException("equals() not overridden: " + getClass());
}

}

编辑(在@CodeConfident 的评论后试了一下,谢谢!从来没有想过它会起作用):

您也可以简单地在抽象类中声明 equals()(而不是在接口(interface)中!),因此隐藏 Object 实现并在任何子类中强制执行新的实现:

public abstract class MyApi {

public abstract boolean equals(Object obj);

public abstract int hashCode();

}

无论如何,您应该始终一起实现 equals()hashCode() 以履行契约(Contract)。

关于java - 在接口(interface)中执行 "equals",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3012081/

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