在 Java 7 中编译一些 Java 代码然后运行它后,我得到一个“比较方法违反其一般契约(Contract)”。
我已阅读 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);
有人可以帮忙吗?谢谢!
最佳答案
如果值相等,比较器必须返回 0。在您当前的实现中,如果它们相等,则返回 1。正确比较 double
值的最简单方法是调用 Double.compare
:
double d1 = MyUtils.calcSmoothDays(date0, new Date());
double d2 = MyUtils.calcSmoothDays(date1, new Date());
return Double.compare(d1, d2);
关于java - 比较方法违反了它在 Java 7 中的一般约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486605/