使用EqualsBuilder简化equals的方法的重写

我们都知道,在定义对象时,我们不会知道类的域回事什么类型

或者是基本类型,又或者是引用类型

传统的比较方法是,在比较基本类型时:
使用”==”,但是在比较引用类型是我们不能通过这种方式去比较
当然这种比较也没有什么实际意义
所以在比较域时就产生了问题,当大量的引用域,与大量的基本类型域一起组成对象时

我想你在比较类型相同方面基本疯了

EqualsBuilder类是重写equals方法的工具类
常用方法如下
append(Object lhs,Object rhs)
//如果两者对象相等,返回true否者返回false

append(int lhs,int rhs);
如果两者对象相等,返回true否者返回false

append(double lhs,double rhs);
如果两者对象相等,返回true否者返回false

isEquals()
如果检查的域都相等,就返回true否则就返回false

那么我们在重写equals方法就简单了

在这里使用cat作为类对象

  @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Cat cat = (Cat) obj;
        //在实际的开发过程中,我们不知道一个对象的域是应用类型还是基本类型
        //采用EqualsBuilder可以解决这个问题
        return new EqualsBuilder().append(name, cat.name).append(age, cat.age).append(weight, cat.weight).append(color, cat.color).isEquals();
    }

当然我们在重写了equals方法后也要重写hashCode方法

 @Override
public int hashCode(){
  return 7 * name.hashCode() + 11 * new Integer(age).hashCode() + 13 * new Double(weight).hashCode() + 17 * color.hashCode();
}

计算哈希码的方式很多,一般来说就是选择质数相乘后各域相加
这个不了解的可以看看数据结构,大致的意识是质数的线性散列更好,具体的不记得了,大家可以查书

猜你喜欢

转载自blog.csdn.net/qq_37657081/article/details/78824939