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

时间:2016-01-04 09:29:17

标签: java equals hashcode

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

public abstract class CEvent {

    abstract public void finished();
}

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

3 个答案:

答案 0 :(得分:8)

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

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

hashCode

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

答案 1 :(得分:2)

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

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

@Override
public int hashCode() {
    return CEvent.class.hashCode();
}

答案 2 :(得分:1)

在这种情况下,只需使用超类(Object)等于和hascode实现。这对你的代码没有任何影响,因为你没有什么可比的。