慕工程0101907
2019-06-20 15:16:04
重寫java Eques()方法-不工作嗎?我遇到了一個有趣的(非常令人沮喪的)問題equals()方法,它導(dǎo)致了我認(rèn)為經(jīng)過良好測試的類崩潰,并導(dǎo)致了一個錯誤,我花了很長時間才找到它。為了完整起見,我沒有使用IDE或調(diào)試器-只是好的老式文本編輯器和System.out。時間非常有限,這是一個學(xué)校項目??傊?我正在開發(fā)一個基本的購物車,它可以包含一個ArrayList的Book對象..為了實現(xiàn)addBook(), removeBook(),和hasBook()購物車的方法,我想檢查一下Book已經(jīng)存在于Cart..所以我走了-public boolean equals(Book b) {
... // More code here - null checks
if (b.getID() == this.getID()) return true;
else return false;}所有的測試都很好。我創(chuàng)建了6個對象并用數(shù)據(jù)填充它們??丶系脑S多添加、移除和帶()操作。Cart一切都很好。我讀到你可以要么有equals(TYPE var)或equals(Object o) { (CAST) var }但認(rèn)為既然起作用了,就沒什么大不了的了。然后我遇到了一個問題-我需要創(chuàng)建一個Book對象只這個ID在它里面的書類。沒有其他數(shù)據(jù)可輸入?;旧先缦拢簆ublic boolean hasBook(int i) {
Book b = new Book(i);
return hasBook(b);}public boolean hasBook(Book b) {
// .. more code here
return this.books.contains(b);}突然,equals(Book b)方法不再起作用。如果沒有良好的調(diào)試器,這需要很長時間才能找到,并且假設(shè)Cart班級經(jīng)過了適當(dāng)?shù)臏y試和修正。擦拭后equals()方法:public boolean equals(Object o) {
Book b = (Book) o;
... // The rest goes here }一切又開始運轉(zhuǎn)了。這個方法決定不接受Book參數(shù)是有什么原因的,盡管它很清楚曾. a Book反對?唯一的區(qū)別似乎是它是從同一個類中實例化的,并且只填充了一個數(shù)據(jù)成員。我很困惑。拜托,放點光?
3 回答

一只斗牛犬
TA貢獻1784條經(jīng)驗 獲得超2個贊
equals()
Object
public boolean equals(Object other);
Object
.
ArrayList
Object
@Overridepublic boolean equals(Object other){ if (other == null) return false; if (other == this) return true; if (!(other instanceof MyClass))return false; MyClass otherMyClass = (MyClass)other; ...test other properties here...}
@Override

白豬掌柜的
TA貢獻1893條經(jīng)驗 獲得超10個贊
@Override
添加回答
舉報
0/150
提交
取消