Force a class to override the .equals method

I have a bunch of class who implement a common interface : Command.

And this bunch of class goes to a Map.

To get the Map working correctly, I need to each class who implements Command to override the method.Object.equals(Object other)

it's fine.

But i whould like to force the overriding of equals. => Have a compilation error when something who implement command dont override equals.

It's that possible ?

Edit : BTW , i will also need to forcing the override of hashcode...


答案 1

No, you can't. What you can do, however, is use an abstract base class instead of an interface, and make abstract:equals()

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

   public abstract boolean equals(Object other);
   public abstract int hashCode();
}

Subclasses of must then provide their own equals and hashCode methods.Command

It's generally bad practice to force API users to extend a base class but it may be justified in this case. Also, if you make an abstract base class instead of an interface, rather than introducing an artificial base class in addition to the Command interface, then there's no risk of your API users getting it wrong.Command


答案 2

Can you extend your objects from an abstract XObject rather than java.lang.Object ?

public abstract class XObject
 extends Object
{
@Override
public abstract boolean equals(Object o);
}

推荐