在界面中强制执行“等于”

2024-04-16

我有一个接口,我希望实现该接口的每个人都实现一个重写的“等于”方法。

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

我猜想发生这种情况的方式是,实现我的接口的类将自动从 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(使用前将#替换为@)

在界面中强制执行“等于” 的相关文章

随机推荐