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

hj6*_*690 1 java sorting inheritance compareto comparator

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

我做的是创建一个父类A,它有自己的compareTo()函数,然后我创建了一个类B继承自类A,并覆盖compareTo(),如:

public int compareTo(Object o) { return super.compareTo(o);}
Run Code Online (Sandbox Code Playgroud)

另一个C类也继承自A类,并将compareTo()重写为:

public int compareTo(Object o) { return -super.compareTo(o);}
Run Code Online (Sandbox Code Playgroud)

所以我列出了一堆B/C类对象,并使用Collections.sort()对它们进行排序,但是我没有看到前一篇文章中提到的Exception,sort函数运行良好,但它给了我一个奇怪的订购.

有人可以帮我吗?谢谢.

Lou*_*man 5

"比较方法违反其一般合同"异常是在尽力而为的基础上抛出的:如果排序算法看到任何明显的东西,它将抛出异常,但它不会做任何额外的工作来测试你的比较方法.您可能只是对测试数据感到满意.

如果幸运的话,不要抛出异常是完全正常的,但是异常可能在以后的任何时刻出现.