我有一个接口,我希望实现此接口的每个人都实现一个覆盖的"等于"方法.
有没有办法确保发生这种情况?
我猜这种情况的方式是实现我的接口的类将自动从Object获取equals,从而使界面愉快.
Arn*_*ter 10
不,你只能创建一个抽象类而不是像这样的接口:
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);
}
Run Code Online (Sandbox Code Playgroud)
或更简单的版本:
public abstract class MyApi {
public boolean equals(Object other) {
throw new UnsupportedOperationException("equals() not overridden: " + getClass());
}
}
Run Code Online (Sandbox Code Playgroud)
编辑(在@CodeConfident评论后试一试,谢谢!从未认为它会起作用):
您也可以简单地equals()在抽象类中声明(不在接口中!),因此隐藏Object实现并在任何子类中强制执行新实现:
public abstract class MyApi {
public abstract boolean equals(Object obj);
public abstract int hashCode();
}
Run Code Online (Sandbox Code Playgroud)
无论如何,你应该总是实施equals()并hashCode()共同履行合同.
| 归档时间: |
|
| 查看次数: |
5916 次 |
| 最近记录: |