怎樣正確改寫Equals方法
阿新 • • 發佈:2019-01-05
地球人都知道,equals方法需要滿足自反,對稱,傳遞,一致,非空特性,如果我們需要在程式碼中改寫equals方法,怎麼樣才能保證這幾個特性呢?
(1)使用==操作符來檢查實參是都指向當前物件的一個物件
(2)使用instanceof操作符檢查實參是都為正確型別
(3)將實參轉換成正確物件
(4)根據業務需求判斷當前物件與實參物件是否相等
(5)最後,必須進行檢查傳遞,一致和對稱
如果滿足了以上5點,基本上可以算是成功改寫equals方法,當然還必須同時改寫hasCode方法
下面是一個改寫的例子供大家參考
publicboolean equals( Object obj )if( this==obj ) returntrue;
if( !( obj instanceof Base ) )
returnfalse;
Base target = (Base)obj;
if( this.getId()!=null&&this.getId().length()>0 )
{
returnthis.getId().equals( target.getId() );
}
{
returnfalse;
}
return EqualsBuilder.reflectionEquals(this, obj);
}
改寫後的hashCode方法(使用common-lang)
原理:如果id屬性不為空,則直接使用id的hashCode,如果為空,則使用這個物件的所有屬性來生成雜湊值
publicint hashCode(){returnthis.getId().hashCode();
}
return HashCodeBuilder.reflectionHashCode(this);
}