本文介紹了如何讓Lombok的EqualsAndHashCode與BigDecimal一起工作的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我正好有here描述的問(wèn)題。這就是說(shuō),如果BigDecimal
的等號(hào)被破壞,那么在類(lèi)中有這樣的字段就無(wú)法使用@EqualsAndHashCode
。我想出的唯一解決方案就是使用exclude
這樣的字段,但這當(dāng)然不是最優(yōu)的。
有什么解決辦法嗎?有沒(méi)有辦法為字段/類(lèi)型插入我自己的比較器?
推薦答案
我最近遇到了同樣的問(wèn)題。
基本上,您會(huì)看到以下行為:
BigDecimal x = new BigDecimal("2");
BigDecimal y = new BigDecimal("2.00");
System.out.println(x.equals(y)); // False
System.out.println(x.compareTo(y) == 0 ? "true": "false"); // True
沒(méi)有開(kāi)箱即用的好解決方案,但您可以重新定義hashCode&;equals:
中使用的BigDecimal字段值
@EqualsAndHashCode
class Test Class {
@EqualsAndHashCode.Exclude
private BigDecimal amount;
...
@EqualsAndHashCode.Include
private BigDecimal getAmountForEquals() {
return ofNullable(amount).map(BigDecimal::stripTrailingZeros).orElse(null);
}
}
這篇關(guān)于如何讓Lombok的EqualsAndHashCode與BigDecimal一起工作的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,