您的位置:首页 > 产品设计 > UI/UE

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

2017-12-17 14:13 381 查看
我们都知道,在定义对象时,我们不会知道类的域回事什么类型

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

传统的比较方法是,在比较基本类型时:

使用”==”,但是在比较引用类型是我们不能通过这种方式去比较

当然这种比较也没有什么实际意义

所以在比较域时就产生了问题,当大量的引用域,与大量的基本类型域一起组成对象时

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

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();
}


计算哈希码的方式很多,一般来说就是选择质数相乘后各域相加

这个不了解的可以看看数据结构,大致的意识是质数的线性散列更好,具体的不记得了,大家可以查书

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: