我正在尝试在 Java 中为需要按两个不同列/变量排序的对象实现可比较的接口。我尝试了多种方法,这是迄今为止最好的一种:
public int compareTo(Object o) {
Match m = (Match)o;
int diff = m.matches - matches;
if (diff == 0) {
if (distance > m.distance) {
return 1;
} else if (distance < m.distance) {
return -1;
} else {
return 0;
}
} else {
return diff;
}
}
但它仍然失败
java.lang.IllegalArgumentException: Comparison method violates its general contract!
任何想法我做错了什么?
旁注 1:如果 o 为 null 或属于不合适的类,则预期会出现 NPEs/ClassCastExceptions - 这不是这里的问题。
旁注 2:我知道 JDK 1.7 中排序算法的变化,但我真的不知道我在哪里违反了合同。所以关闭异常似乎是错误的解决方案。