EqualsBuilder与自己的equals方法
我刚刚在equals
方法中使用EqualsBuilder()
遇到了一个代码。 使用它而不是编写(或从eclipse生成)我们自己的逻辑是否有任何优势? 一个简单的例子会更有帮助。
编辑:如果它没有任何好处,而不是在课堂上有更少的代码,是不是有reflection的开销?
有几种方法可以解决这个问题。
-
你可以自己动手 – 最有可能得到一些微妙的错误。
-
您可以让Eclipse为您生成equals和hashCode方法 – 这会留下大量代码,受到无意的编辑,并且在类获取新字段时无法更新。
-
你可以使用EqualsBuilder; 它避免了上述问题。
-
最重要的是,至少根据我的经验,你可以使用lombok的EqualsAndHashCode注释。
使用EqualsBuilder
并不比从头开始编写equals
方法更好或更差。 换句话说,我不认为使用EqualsBuilder
是最佳实践。
非EqualsBuilder
equals()
方法通常如下所示:
public boolean equals(Object other) { boolean result; if(this == other) result = true; else if(other == null) result = false; else if(other instanceof MyClass) { MyClass o=(MyClass) other; result = Objects.equals(this.a, oa) && Objects.equals(this.b, ob) // ... && Objects.equals(this.z, oz); } else result = false; return result; }
我没有看到需要的例子。 Equals构建器将为您生成完全相同的代码,因此唯一的区别是您在类中的代码较少。
从我的角度来看,最好编写这些方法(因为你在覆盖equals时总是要覆盖hashCode)
使用ANYTHING除了你自己在equals()中的实现,如果你可以使用…说严格的唯一ID,则保证“更糟”。
如果您的ID非常独特,那么您很可能会有最好的,可能的实现,当然它需要进行相当多的修改:
@Override public boolean equals(Object other) { if(other instanceof MyClass) { MyClass obj = (MyClass)other; return obj.getID() == this.getID(); } else return false; }
看看这个 , 特别是 这个