Java – an effective implementation of equals (object o)

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
分享
二维码
< <上一篇
下一篇>>