这个问题与为具有大量字段的对象覆盖 equals() 方法特别相关。首先,让我说这个大对象不能在不违反 OO 原则的情况下分解成多个组件,所以告诉我“没有一个类应该有超过 x 个字段”是没有帮助的。
继续前进,当我忘记检查其中一个字段是否相等时,问题就解决了。因此,我的 equals 方法不正确。然后我想使用反射:
--code removed because it was too distracting--
这篇文章的目的不一定是重构代码(这甚至不是我正在使用的代码),而是获取关于这是否是一个好主意的输入。
优点:
- 如果添加了新字段,则会自动包含该字段
- 该方法比 30 个 if 语句简洁得多
缺点:
- 如果添加了一个新字段,它会自动包含在内,有时这是不可取的
- 性能:这必须更慢,我觉得没有必要打破分析器
- 在比较中将某些要忽略的字段列入白名单有点难看
有什么想法吗?