1

我们在日常项目中使用 Lombok,我喜欢它的简洁性。我们有一个 BigDecimal 属性的基调,并通过一些努力使它们忽略了 Lombok 生成的 equals 和 hashCode 方法中的比例。有没有办法在 Java 16 中引入的新记录类中做到这一点?

4

1 回答 1

3

听起来您正在寻找一种通用方法来更改具有特定现有类型的字段的实现方式equals和实现方式。hashCode没有办法做到这一点。

你有两个选择:

  1. 在你定义的每一个上实施equals和你自己,比如:hashCoderecord
record Test(BigDecimal v) {
    public int hashCode() {
        return Util.hashCodeWithoutScale(v);
    }

    public boolean equals(Object o) {
        return Util.equalsForBigDecimalWithoutScale(this, o);
    }
}
  1. 始终使用您定义的包装器:
record Test(BigDecimalWrapperThatIgnoresScaleInHashCodeAndEquals x) {
}

对我们来说,这个功能似乎无法使用。

虽然BigDecimal接近您的要求,但行为不匹配表明使用包装器或替代类可能会更好,即使它主要委托给现有类。

于 2021-08-08T07:47:47.563 回答