1. 程式人生 > >怎樣正確改寫Equals方法

怎樣正確改寫Equals方法

地球人都知道,equals方法需要滿足自反,對稱,傳遞,一致,非空特性,如果我們需要在程式碼中改寫equals方法,怎麼樣才能保證這幾個特性呢?

(1)使用==操作符來檢查實參是都指向當前物件的一個物件

(2)使用instanceof操作符檢查實參是都為正確型別

(3)將實參轉換成正確物件

(4)根據業務需求判斷當前物件與實參物件是否相等

(5)最後,必須進行檢查傳遞,一致和對稱

如果滿足了以上5點,基本上可以算是成功改寫equals方法,當然還必須同時改寫hasCode方法

下面是一個改寫的例子供大家參考

publicboolean equals( Object obj )
    
{
        
ifthis==obj ) returntrue;
        
        
if!( obj instanceof Base ) )
            
returnfalse;
        
        Base target 
= (Base)obj;
        
        
ifthis.getId()!=null&&this.getId().length()>0 )
        
{
            
returnthis.getId().equals( target.getId() );
        }

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

        
        
return EqualsBuilder.reflectionEquals(this, obj);
    }

改寫後的hashCode方法(使用common-lang)

原理:如果id屬性不為空,則直接使用id的hashCode,如果為空,則使用這個物件的所有屬性來生成雜湊值

publicint hashCode(){
        
if(this.getId()!=null&&this.getId().length()>0){
            
returnthis.getId().hashCode();
        }

        
return HashCodeBuilder.reflectionHashCode(this);
    }