在没有字段的类中实现hashCode()和equals()

Hél*_*ène 5 java equals hashcode

我有一个抽象类,将在Hashtable中使用:

public abstract class CEvent {

    abstract public void finished();
}
Run Code Online (Sandbox Code Playgroud)

如果没有任何字段,只有方法,如何实现hashCode()?我应该依赖hashCode的Object实现吗?

rgh*_*ome 8

如果类是抽象的,那么它必须具有具体的子类.您可以在具体子类中实现哈希码方法.

你应该确保hashCode()与之一致equals().如果认为两个对象相等,则应返回相同的哈希码.有关更多详细信息,请参阅对象的Java文档.

的hashCode

hashCode如果可以从抽象方法获取散列所需的信息,则可以在抽象类中实现.Java类就是AbstractList这样做的.但是,您需要感到高兴的是,默认情况下,不同的派生类将继承该方法,并将为类似数据返回相同的哈希代码.在您的情况下,hashCode在抽象类中实现该函数没有意义.


Ale*_*tov 7

实际上,您可以使用以下作为默认行为:

@Override
public boolean equals(Object o) {
   return this == o || o instanceof CEvent;
}

@Override
public int hashCode() {
    return CEvent.class.hashCode();
}
Run Code Online (Sandbox Code Playgroud)