EqualsBuilder与自己的equals方法

时间:2014-07-30 20:19:23

标签: java

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

编辑:如果它没有任何好处而不是在课程中使用更少的代码,那么是否有反射的开销?

4 个答案:

答案 0 :(得分:5)

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

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

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

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

  4. 最重要的是,至少根据我的经验,您可以使用lombok的EqualsAndHashCode注释。

答案 1 :(得分:0)

使用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, o.a)
                 && Objects.equals(this.b, o.b)
                 // ...
                 && Objects.equals(this.z, o.z);
    }
    else
        result = false;

    return result;
}

答案 2 :(得分:0)

我认为不需要举例。 Equals构建器将为您生成完全相同的代码,因此唯一的区别是您在类中的代码较少。

从我的角度来看,最好编写这些方法(因为你在覆盖equals时总是要覆盖hashCode)

答案 3 :(得分:-1)

使用 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;
}

查看thisthis,尤其是 this