但要用的近乎人意,卻要很費一番功夫
沒有被覆寫的equals是比較兩物件的參考位置,物件不同則傳回false
若要比對兩物件屬性內容值,則要自己覆寫
並且也一併覆寫hashCode,不同物件會有不同hash code
若兩物件equals()相等,hashCode()也必須相等,否則可能會有錯誤問題
尤其是Hash-Based Collection會用到
/* equals()覆寫例子 */
public boolean equals(Object obj) {
//若同一物件則true
if (this == obj) return true;
//getClass()會可用來判斷物件是否屬於同一類別
if(obj != null && getClass() == obj.getClass()){
if(obj instanceof Ball) {
Ball ball = (Ball)obj;
//比對屬性內容值
if (tradeMark.equals(ball.tradeMark) &&
kind.equals(ball.kind) &&
color.equals(ball.color)) {
return true;
}
}
}
return false;
}
覆寫hashCode()不容易,
使用jakarta所提供的HashCodeBuilder類別,
下載commons-lang-2.1.jar,
看到這裡,懶惰的我,也想放棄了,
真的要用到再說吧!
/* hashCode()覆寫例子 */
import org.apache.commons.lang.builder.HashCodeBuilder;//加入外掛
public int hashCode() {
return new HashCodeBuilder(17, 37). //應放入兩個質數
append(tradeMark). //利用append()加入參與的物件變數
append(kind).
append(color).
toHashCode(); //最後取得hash code數值
}
0 意見 :
張貼留言