我有一个接口,我希望实现该接口的每个人都实现一个重写的“等于”方法。
有没有办法确保这种情况发生?
我猜想发生这种情况的方式是,实现我的接口的类将自动从 Object 获取 equals,从而使接口满意。
不,你只能创建一个抽象类,而不是像这样的接口:
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());
}
}
EDIT(在 @CodeConfident 发表评论后尝试一下,谢谢!从来没想过它会起作用):
您也可以简单地声明equals()
在抽象类中(而不是在接口中!),因此隐藏Object
实现并在任何子类中强制执行新的实现:
public abstract class MyApi {
public abstract boolean equals(Object obj);
public abstract int hashCode();
}
无论如何你应该始终实施equals()
and hashCode()
共同履行合同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)