【发布时间】:2016-06-20 22:02:37
【问题描述】:
我正在尝试重现这篇文章中提到的问题:Comparison method violates its general contract
我所做的是创建一个父类 A,它有自己的 compareTo() 函数,然后我创建了一个从类 A 继承的类 B,并覆盖了 compareTo(),如下所示:
public int compareTo(Object o) { return super.compareTo(o);}
另外一个类 C 也继承自类 A,并将 compareTo() 重写为:
public int compareTo(Object o) { return -super.compareTo(o);}
所以我列出了一堆 B/C 类对象,并使用 Collections.sort() 对它们进行排序,但是我没有看到上一篇文章中提到的异常,排序函数运行良好,但它给出了我一个奇怪的命令。
有人可以帮我吗?谢谢。
【问题讨论】:
-
你如何期望这种排序工作?坦率地说,覆盖
compareTo听起来它天生注定要失败。 -
@LouisWasserman 哦,实际上我试图重现该帖子中提到的问题,我认为我覆盖
compareTo的方式应该重现异常,但它没有。 -
您甚至无法保证该异常会出现在任何给定的测试数据中,甚至根本无法保证,具体取决于您的 Java 版本。
标签: java sorting inheritance comparator compareto