第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重寫java Eques()方法-不工作嗎?

重寫java Eques()方法-不工作嗎?

慕工程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個贊

在Java中,equals()方法繼承的Object是:

public boolean equals(Object other);

換句話說,參數(shù)必須是類型的。Object.

這個ArrayList使用正確的等于方法,在該方法中,您總是調(diào)用沒有正確覆蓋的方法Object都是等價物。

不正確地重寫方法可能會導(dǎo)致問題。

我每次重寫等于以下內(nèi)容:

@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注釋可以幫助一噸愚蠢的錯誤。

每當(dāng)您認(rèn)為您正在重寫超類或接口的方法時,請使用它。這樣,如果你做錯了,你就會得到一個編譯錯誤。


查看完整回答
反對 回復(fù) 2019-06-20
?
MYYA

TA貢獻1868條經(jīng)驗 獲得超4個贊

如果您使用eclipse,只需轉(zhuǎn)到頂部菜單即可。

源->GenerateEquals()和hashCode()


查看完整回答
反對 回復(fù) 2019-06-20
?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

對你的問題略為離題,但無論如何,這可能是值得一提的:

公朗有一些很好的方法可以用于重寫等于和hashcode。檢查等式(.)HashCodeBuilder.RefltionHashCode(.)..在過去,我避免了很多頭痛-當(dāng)然,如果你只想在ID上做“相等”的事情,它可能不適合你的情況。

我也同意您應(yīng)該使用@Override無論何時重寫等于(或任何其他方法)。


查看完整回答
反對 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 642 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號