【发布时间】:2012-02-28 17:18:41
【问题描述】:
在 Java 7 中编译一些 Java 代码然后运行它后,我收到“比较方法违反其一般合同”。
我已阅读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 的一个新特性。可以使用新的系统属性配置旧行为:java.util.Arrays.useLegacyMergeSort 请参阅stackoverflow.com/a/8417446/450812
标签: java