我们在日常项目中使用 Lombok,我喜欢它的简洁性。我们有 BigDecimal 属性的基调,并通过一点点努力使它们忽略了 Lombok 生成的 equals 和 hashCode 方法中的比例。有没有办法在 Java 16 中引入的新记录类中执行此操作?
最佳答案
听起来您正在寻找一种通用方法来改变具有特定现有类型的字段的 equals
和 hashCode
的实现方式。没有办法做到这一点。
您有两个选择:
- 在您定义的每个
记录
上自行实现equals
和hashCode
,例如:
record Test(BigDecimal v) {
public int hashCode() {
return Util.hashCodeWithoutScale(v);
}
public boolean equals(Object o) {
return Util.equalsForBigDecimalWithoutScale(this, o);
}
}
- 始终使用您定义的包装器:
record Test(BigDecimalWrapperThatIgnoresScaleInHashCodeAndEquals x) {
}
For us this feature seems unusable.
虽然 BigDecimal
接近您的要求,但行为上的不匹配表明您可能会更幸运地使用包装器或替代类,即使它很大程度上委托(delegate)给现有类。
关于Java 16 记录 BigDecimal equals & hashcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68690126/