Java 7でJavaコードをコンパイルして実行した後、「比較メソッドがその一般契約に違反しています。比較メソッドがJava 7の一般契約に違反しています
私はComparison method violates its general contract! Java 7 onlyを読んでおり、以前のバージョンのJavaでは無視されていたコードに問題があることを認識しています。しかし、私は自分のコードに何が間違っているかは分からない。 Collections.sort()はエラーを生成します。
私のコードは次のとおりです。
public Comparator sortBySmoothDays() {
Comparator c = new Comparator() {
public int compare(Object arg0, Object arg1) {
Date date0 = ((PosObject)arg0).getDate();
Date date1 = ((PosObject)arg1).getDate();
double d1 = MyUtils.calcSmoothDays(date0, new Date());
double d2 = MyUtils.calcSmoothDays(date1, new Date());
if (d1 >= d2) {
return 1;
}
else {
return -1;
}
}
};
return c;
}
Comparator c = ComparatorUtils.getInstance().sortBySmoothDays();
Collections.sort(posList, c);
誰でも助けることができますか?ありがとうございました!
JFI:この例外をスローすると、新しいJava7機能で正しく
double
値を比較する最も簡単な方法は、Double.compare
を呼び出すことです。古い動作は、新しいシステムプロパティで設定できます。java.util.Arrays.useLegacyMergeSort参照:http://stackoverflow.com/a/8417446/450812 – alfonx