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

标签 java reflection equals

这个问题特别与为具有大量字段的对象覆盖 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/

相关文章:

java - 银行功能,新账户获得5美元,但是当提款大于余额时,它不会取走余额并给出错误

java - 任何类型泛型构造的枚举类

java - 在 Android 应用程序中从 ImageButton 打开图库

javascript - 反射 Web 应用程序 (WebIDE)

java - Intellij 内置应用服务器

java - 通过Java Reflection/Scala Reflection调用实例方法: Which one is faster?

c# - 可移植类库和反射

java - java中的equals方法

java - 取消覆盖 hashCode

if-statement - 检查空格键是否相等?