强制类覆盖.equals方法

Ant*_*val 51 java overriding requirements interface equals

我有一堆实现通用接口的类:Command.

这一堆课程转到了Map.

为了使Map正常工作,我需要每个实现Command的类来覆盖该Object.equals(Object other)方法.

没关系.

但我想强迫平等的压倒一切.=>当实现命令的东西不重写等于时出现编译错误.

这可能吗?

编辑:BTW,我还需要强制重写哈希码...

ska*_*man 83

不,你不能.但是,您可以使用抽象基类而不是接口,并使用equals()abstract:

abstract class Command {
   // put other methods from Command interface here

   public abstract boolean equals(Object other);
   public abstract int hashCode();
}
Run Code Online (Sandbox Code Playgroud)

然后Command 必须提供自己的equals和hashCode方法的子类.

强制API用户扩展基类通常是不好的做法,但在这种情况下可能是合理的.此外,如果你让Command一个抽象基类,而不是一个接口,而不是引入人造基类命令接口,那么就没有犯错的API的用户的风险.

  • 您可能想要添加一个抽象的`hashCode`,只是为了完整性. (15认同)
  • 经过十多年的Java作为第一语言,我才学到了新的东西. (6认同)

Pie*_*rre 17

你可以从抽象的XObject而不是java.lang.Object扩展你的对象吗?

public abstract class XObject
 extends Object
{
@Override
public abstract boolean equals(Object o);
}
Run Code Online (Sandbox Code Playgroud)