gpt4 book ai didi

java - Groovy:生成 equals 和 hashCode 方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:38 27 4
gpt4 key购买 nike

如果我有一个简单的 Groovy 类,例如

class Address {

Integer streetNumber
String streetName
String state
String zip
Country country
}

尽管我可以编写(或使用 IDE 生成)hashCodeequals 方法,例如:

boolean equals(o) {
if (this.is(o)) return true;

if (!o || getClass() != o.class) return false;

Address that = (Address) o;

if (streetNumber? !streetNumber.equals(that.streetNumber) : that.streetNumber!= null) return false;
if (streetName? !streetName.equals(that.streetName) : that.streetName!= null) return false;
if (state? !state.equals(that.state) : that.state!= null) return false;
if (zip? !zip.equals(that.zip) : that.zip!= null) return false;
if (country? !zip.equals(that.zip) : that.zip!= null) return false;

return true;
}

int hashCode() {
int result = (streetNumber ? streetNumber.hashCode() : 0);
result = 31 * result + (streetName ? streetName.hashCode() : 0);
result = 31 * result + (state ? state.hashCode() : 0);
result = 31 * result + (zip ? zip.hashCode() : 0);
return 31 * result + (country ? country.hashCode() : 0);
}

虽然这会工作得很好,但我觉得我可以更好地利用 Groovy 的动态性来用更少的代码实现同样的事情。我想到的一种方法是使用 .properties 来获取对象的属性名称和值的映射。然后我可以遍历这些属性,对每个属性调用 hashCode()equals() 以获得与上述相同的结果。

在我走这条路之前,我只想看看是否有其他人找到了解决这个问题的好办法。我对推出自己的解决方案有点谨慎,因为弄乱 equals()hashCode() 的后果可能很可怕且难以追踪。

谢谢,唐

最佳答案

我不是 groovy 开发人员,但我知道从 groovy 1.8 开始,您可以在类型上使用 @EqualsAndHashCode 调用 AST 转换。

关于java - Groovy:生成 equals 和 hashCode 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1407311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com