如何在pojo中更新equals方法以使用compareTo实现?

时间:2017-05-10 17:42:53

标签: java c# equals compareto

假设我在课程field中有BigDecimal类型MyClass

目前,我在equals等于实现中使用了大十进制MyClass方法。

当前代码:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!super.equals(o)) return false;
    if (o instanceof MyClass) {
        MyClass that = (MyClass) o;
        return field != null ? field.equals(that.field) : that.field == null;
    }
    return false;
}

我想更新我的equals方法以使用Big Decimal的compareTo方法。

我发现equals类的compareToBigDecimal实现不一致。

以下实现是否正确地符合所有equals合同,如第一种方法?

更新代码:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!super.equals(o)) return false;
    if (o instanceof MyClass) {
        MyClass that = (MyClass) o;
        return field != null && that.field != null ? field.compareTo(that.field) == 0 : field == null && that.field == null;
    }
    return false;
}

我们为什么这样做

我们正在与其他应用程序(用C#编写)连接,其中field被定义为Double

我们使用Jackson库进行序列化。

对于前。从另一个应用程序反序列化后,BigDecimal field的值为0.0340,当查找列表中的记录时,当前等于实现失败。

我们不想做什么

field的类型更改为Double,因为我们还有其他要求需要我们准确计算计算结果。

其他问题

是否有解决此Double / BigDecimal序列化/反序列化问题的首选方法?

我已经查看了Implementing equals method using compareTo帖子但是这并没有提供有关如何检查空值和其他可能性的信息,因为compareTo方法会抛出NullPointerException的null参数。

如果SO仍然广泛,请告诉我。

感谢所有帮助。

0 个答案:

没有答案