为什么在对象中定义了等于和哈希码?
决定将这些方法包含在java.lang.Object中的原因是什么?相等和散列对许多类没有意义。
创建两个接口会更合乎逻辑:
interface Equalable {
boolean equals(Equalable other);
}
interface Hashable extends Equalable {
int hashCode();
}
例如,哈希集定义可能如下所示
class HashSet<T extends Hashable> ...
它可以防止一个常见的初学者错误 - 使用一组项目而不实现equals/hashCode。