EqualsBuilder与自己的equals方法

我刚刚在equals方法中使用EqualsBuilder()遇到了一个代码。 使用它而不是编写(或从eclipse生成)我们自己的逻辑是否有任何优势? 一个简单的例子会更有帮助。

编辑:如果它没有任何好处,而不是在课堂上有更少的代码,是不是有reflection的开销?

有几种方法可以解决这个问题。

  1. 你可以自己动手 – 最有可能得到一些微妙的错误。

  2. 您可以让Eclipse为您生成equals和hashCode方法 – 这会留下大量代码,受到无意的编辑,并且在类获取新字段时无法更新。

  3. 你可以使用EqualsBuilder; 它避免了上述问题。

  4. 最重要的是,至少根据我的经验,你可以使用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; } 

看看这个 , 特别是 这个