2 つの異なる列/変数で並べ替える必要があるオブジェクトに対して、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 でのソート アルゴリズムの変更については知っていますが、ここで契約に違反している箇所がわかりません。したがって、例外をオフにすることは間違った解決策のようです。