Otrzymuję "metodę porównania narusza jej ogólny kontrakt" po skompilowaniu kodu Java w języku Java 7, a następnie uruchomieniu go.Metoda porównania narusza ogólne warunki umowy w języku Java 7
Przeczytałem Comparison method violates its general contract! Java 7 only i zdałem sobie sprawę, że coś jest nie tak z moim kodem, który został zignorowany w poprzednich wersjach Javy. Jednak nie mogę wyliczyć, co jest nie tak z moim kodem. Funkcja Collections.sort() generuje błąd.
Mój kod to:
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);
Czy ktoś może pomóc? Dziękuję Ci!
JFI: Rzucanie ten wyjątek to nowa funkcja Java7. Stare zachowanie można skonfigurować za pomocą nowej właściwości systemowej: java.util.Arrays.useLegacyMergeSort Zobacz http://stackoverflow.com/a/8417446/450812 – alfonx