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