我有一个抽象类,将在Hashtable中使用:
public abstract class CEvent {
abstract public void finished();
}
如果hashCode()没有任何字段,只有方法? 我应该依赖于hashCode的Object实现吗?
答案 0 :(得分:8)
如果类是抽象的,那么它必须具有具体的子类。您可以在具体的子类中实现哈希码方法。
您应确保hashCode()
与equals()
一致。如果认为两个对象相等,则应返回相同的哈希码。有关更多详细信息,请参阅有关对象的Java文档。
如果可以从抽象方法获取散列所需的信息,则可以在抽象类中实现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实现。这对你的代码没有任何影响,因为你没有什么可比的。