我有一个类,它的相等性(根据 equals()
)必须由对象标识定义,即 this == other
.
我想实现 Comparable
来排序这些对象(比如通过一些 getName()
属性)。为了与 equals()
保持一致,compareTo()
不得返回 0
,即使两个对象具有相同的名称也是如此。
有没有办法在 compareTo
的意义上比较对象身份?我可以比较 System.identityHashCode(o)
,但在哈希冲突的情况下仍会返回 0
。
最佳答案
我认为真正的答案是:那时候不要实现 Comparable。实现此接口(interface)意味着您的对象具有自然顺序。当您跟进那个想法时,“相等”的东西应该在同一个地方。
如果有的话,您应该使用自定义比较器……但即便如此也没有多大意义。如果定义 a < b ... 的东西不允许给你 a == b(当 a 和 b 根据你的 < 关系“相等”时),那么比较的整个方法对于您的用例已损坏。
换句话说:仅仅因为您可以将代码放入一个“以某种方式”产生您想要的结果的类中……并不意味着这样做是一个好的主意。
关于java - 如何实现 Comparable 使其与身份平等一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55450569/