gpt4 book ai didi

Java 等于(): to reflect or not to reflect

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:10 26 4
gpt4 key购买 nike

这个问题特别与为具有大量字段的对象覆盖 equals() 方法有关。首先,让我说这个大对象不能在不违反 OO 原则的情况下分解成多个组件,所以告诉我“没有类应该有超过 x 个字段”无济于事。

继续前进,当我忘记检查其中一个字段是否相等时,问题就出现了。因此,我的 equals 方法是不正确的。然后我想到使用反射:

--code removed because it was too distracting--

这篇文章的目的不一定是重构代码(这甚至不是我正在使用的代码),而是为了了解这是否是个好主意。

优点:

  • 如果添加了一个新字段,它会自动包含
  • 该方法比 30 个 if 语句简洁得多

缺点:

  • 如果添加了一个新字段,它会自动包含,有时这是不受欢迎的
  • 性能:这必须更慢,我觉得没有必要打破分析器
  • 在比较中将某些要忽略的字段列入白名单有点难看

有什么想法吗?

最佳答案

如果您确实出于性能原因想要列入白名单,请考虑使用注释来指示要比较的字段。此外,如果您的字段没有很好地实现 equals(),则此实现将不起作用。

附言如果您为 equals() 走这条路,请不要忘记为 hashCode() 做类似的事情。

附言我相信你已经考虑过了 HashCodeBuilderEqualsBuilder .

关于Java 等于(): to reflect or not to reflect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124585/

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