怎样正确改写Equals方法

地球人都知道,equals方法需要满足自反,对称,传递,一致,非空特性,如果我们需要在代码中改写equals方法,怎么样才能保证这几个特性呢?

(1)使用==操作符来检查实参是都指向当前对象的一个对象

(2)使用instanceof操作符检查实参是都为正确类型

(3)将实参转换成正确对象

(4)根据业务需求判断当前对象与实参对象是否相等

(5)最后,必须进行检查传递,一致和对称

如果满足了以上5点,基本上可以算是成功改写equals方法,当然还必须同时改写hasCode方法

下面是一个改写的例子供大家参考

 

public   boolean  equals( Object obj )
    
{
        
ifthis==obj ) return true;
        
        
if!( obj instanceof Base ) )
            
return false;
        
        Base target 
= (Base)obj;
        
        
ifthis.getId()!=null && this.getId().length()>0 )
        
{
            
return this.getId().equals( target.getId() );
        }

        
        
if( target.getId()!=null && target.getId().length()>0 )
        
{
            
return false;
        }

        
        
return EqualsBuilder.reflectionEquals(this, obj);
    }

 

改写后的hashCode方法(使用common-lang)

原理:如果id属性不为空,则直接使用id的hashCode,如果为空,则使用这个对象的所有属性来生成散列值

 

  public   int  hashCode() {
        
if(this.getId()!=null&&this.getId().length()>0){
            
return this.getId().hashCode();
        }

        
return HashCodeBuilder.reflectionHashCode(this);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值