1


我在多个线程中发现了这个问题并尝试了建议的回复。但没有获得成功。

我的代码如下所述:

@Override
public int compareTo(CustomObject o) {
    try {
        if (getOriginalActionDate() == null || o.getOriginalActionDate() == null) {
            return -1;
        }
        return new SimpleDateFormat("MM/dd/yyyy").parse(
                getOriginalActionDate()).compareTo(
                new SimpleDateFormat("MM/dd/yyyy").parse(o
                        .getOriginalActionDate()));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
}

请让我知道我在这里犯了什么错误?在这方面的任何指针都会非常有帮助。

谢谢,
戈帕尔拉尔

4

1 回答 1

5

当两个Dates 都是null,你应该返回0而不是-1

实现者必须确保所有 x 和 y 的 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。(这意味着如果 y.compareTo(x) 抛出异常,则 x.compareTo(y) 必须抛出异常。)

对于发布的代码,当两个对象中的日期都是null

x.compareTo(y) == y.compareTo(x) == -1

这违反了合同。

要修复该方法,请将iffor null 检查更改为:

if (getOriginalActionDate() == null && o.getOriginalActionDate() == null) {
    return 0;
} else if (getOriginalActionDate() == null) {
    return -1;
} else if (o.getOriginalActionDate() == null) {
    return 1;
}

因此,如果两者都为 null,则返回值为 0(相等),否则null将被视为较小的对象。

于 2013-05-01T14:39:02.180 回答