假设我有一个类,所有实例都被认为是相等的。一个典型的用例是没有任何状态的类,但只作为函数。所有实例相同的类的HashCode实现
public class ToStringFunction implements Function<Object, String> {
@Override
public String apply(Object o) {
return o.toString();
}
@Override
public boolean equals(Object o) {
return o instanceof ToStringFunction;
}
}
现在,应该如何实现一个hashCode方法?当然,为了兑现equals/hashCode合约,它需要是一个常量值。但是,这应该是什么价值?如果使用诸如0或1之类的微不足道的值,则可能导致与其他类似的类的冲突。
所以它似乎归结为这样一个问题:如何实现一个哈希码可能是唯一的给定类,但其所有实例相同。
我想出了这两个想法。你觉得呢,他们理智吗?
@Override
public int hashCode() {
return ToStringFunction.class.hashCode();
}
@Override
public int hashCode() {
return "ToStringFunction".hashCode();
}
基于类的方法对我来说看起来很好......但是如果我可能会问,你需要什么equals/hashCode呢? – fge
我认为当他们没有状态只是函数时,你不需要把对象放入一个集合中。 – gyorgyabraham
我没有具体的用例,但我想你可能想要对一些数据应用一组操作。例如,JDK Comparator在其接口中定义了equals:http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html – Natix