Java – an effective implementation of equals (object o)
•
Java
After I finished writing the title, I read so post, but still decided to discuss the implementation of bugs in Java This is my normal implementation
@Override public boolean equals(Object o){ if(o == null) return false; if(o instanceof CompositePk == false) return false; if(this == o) return true; CompositePk that = (CompositePk)o; return new EqualsBuilder().append(this.id,that.id) .append(this.bucketId,that.bucketId) .isEquals(); }@H_502_12@使用Apache的EqualsBuilder来完成平凡的事情.比这更容易的是我的Netbean自动生成的equals(o)实现
@Override public boolean equals(Object obj){ if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final TemplatesWrapper other = (TemplatesWrapper) obj; if (this.timeAdded != other.timeAdded && (this.timeAdded == null || !this.timeAdded.equals(other.timeAdded))) { return false; } return true; }@H_502_12@我从2个差异项目中获取这些,但他们都试图完成同样的事情,但使用diff方法.您认为哪种风格或者您发现有什么缺陷?
Solution
I will do this:
public boolean equals(Object ob) { if (ob == null) return false; if (ob == this) return true; if (!(ob instanceof MyClass)) return false; // OR if (ob.getClass() != getClass()) return false; // check relevant members }@H_502_12@中间的两条线是不同的.一个允许子类相等(第一个),另一个不允许.使用合适的任何一种.
举个例子,Java的AbstractList类可能会使用第二种形式,因为List的确切实现是无关紧要的.重要的是,如果成员是平等的,并且处于相同的位置.
相反,Person类应该使用第一个表单(instanceof),因为如果有一个Student子类并且你调用Person.equals(Student)它可能返回true而不检查Student中的额外字段,而Student.equals(Person)可能会返回假.如果equals()不是可交换的,那你就是在寻找麻烦.
我倾向于使用由我的IDE(IntelliJ IDEA)生成的equals()方法,而不是为某些Apache库创建不必要的依赖,以获得微不足道的收益.
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码