java - 如何实现 Comparable 使其与身份平等一致

标签 java equals comparator comparable

我有一个类,它的相等性(根据 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/

相关文章:

c# - 为什么 or 运算符在使用 "not equals"时不能在 if 语句中工作?

java - 将 "<"或 ">"作为参数传递给比较器

java - 如何使用 CSVReaderHeaderAware 并迭代列

java - Android - 游戏循环中的主动渲染?

java正则表达式输入比模式短

java - equals 和 hashCode 的可重用实现

java - 如何使用装饰器 DP 将 addDough 方法写入我的披萨

c# - ((System.Object)p == null)

java - 比较具有多个属性的 bean,每个属性取决于两个 bean

java - 排序集变换