如果我在两个孩子的课程中以不同的方式覆盖compareTo()会发生什么



我正在尝试重现本文中提到的问题:比较方法违反了一般合同

我要做的是制作一个父级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()对它们进行排序,但是我没有看到上一篇文章中提到的例外,但是Sort函数运行良好,但是它给出了我一个奇怪的命令。

有人可以在这里帮我吗?谢谢。

"比较方法违反了其一般合同"例外是在最佳及时基础上抛出的:如果排序算法会看到任何明显的东西会引发例外,则但是它不会为测试您的比较方法做任何额外的工作。您可能只是对您的测试数据很幸运。

,如果您很幸运,则不得抛出是完全正常的,但是这种例外可能会在任何时候出现。

作为集合的文档。

iLlegalargumentException-(可选)如果实施发现列表要素的自然顺序违反了可比的合同

不需要实现它。

还请注意

实施注意:
此实现使用指定列表和空比较器。

和list.sort的文档包含相同的说明,此例外是可选的。

最新更新