我刚刚在EqualsBuilder()
方法中使用equals
遇到了代码。使用它而不是编写(或从eclipse生成)我们自己的逻辑是否有任何优势?一个简单的例子会更有帮助。
编辑:如果它没有任何好处而不是在课程中使用更少的代码,那么是否有反射的开销?
答案 0 :(得分:5)
有几种方法可以解决这个问题。
你可以自己动手 - 最有可能获得 一些微妙的错误。
您可以让Eclipse为您生成equals和hashCode方法 - 这会留下大量代码,会受到无意的编辑,并且在类获取新字段时无法更新。
您可以使用EqualsBuilder;它避免了上述问题。
最重要的是,至少根据我的经验,您可以使用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;
}