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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

3 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

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

public boolean equals(Object other);

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

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

不正確地重寫方法可能會(huì)導(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注釋可以幫助一噸愚蠢的錯(cuò)誤。

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


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

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

源->GenerateEquals()和hashCode()


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

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

對(duì)你的問題略為離題,但無(wú)論如何,這可能是值得一提的:

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

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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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