为什么Java中没有Hashable接口

kar*_*oss 21 java interface hashcode

Object在Java中有hashCode方法,但它只在像HashSet或的关联容器中使用HashMap.它为什么这样设计?Hashable具有hashCode方法的界面看起来更优雅的解决方案.

Mar*_*nik 9

在我看来,主要的论点是hashCode,可以为任何Java对象计算明确定义的默认值,以及同样明确定义的默认值equals.没有充分的理由拒绝所有对象的这个功能,当然有很多理由保留它.所以这在我的书中是明智的.

  • 我不认为他说应该有一个获得`hashCode`的一般程序; 他声称`hashCode`应该成为某个接口`Hashable`的一部分,而不是留在`Object`中. (4认同)
  • 我对这个问题的回答是,有一个实现,所有`对象都有,并非所有用户都可以自己重新实现 - 即`Object.hashCode()当前提供的基于内存类型的实现. `. (4认同)
  • IMO缺少一个`Hashable`接口,甚至更好的`Hashable`的超级接口用于单向比较,即定义equals方法,是该语言最大的缺点之一.`hashCode`和`equals`的默认实现很少有用,我宁愿要求用户明确定义这些方法,以便用户被迫了解它们的含义和含义.我发现理解覆盖这两种方法的必要性是该语言学习曲线中最大的障碍之一. (3认同)