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

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

為具有循環(huán)引用 Java 的類實(shí)現(xiàn) equals()

為具有循環(huán)引用 Java 的類實(shí)現(xiàn) equals()

慕娘9325324 2022-07-27 20:08:21
我想要一種方法來覆蓋具有循環(huán)引用的類的 equals 方法。下面是我的課程編輯:刪除了 getter 和 setter 的代碼class Person implements Serializable{    private String fullName;    private Person friend;    // Getters and setters    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Person other = (Person) obj;        if (friend == null) {            if (other.friend != null)                return false;        } else if (!friend.equals(other.friend))            return false;        if (fullName == null) {            if (other.fullName != null)                return false;        } else if (!fullName.equals(other.fullName))            return false;        return true;    }}在客戶端類中,我有以下內(nèi)容:Person p1 = new Person();Person p2 = new Person();Person p3 = new Person();p1.setFullName("nkuruza");p2.setFullName("Another");p3.setFullName("nkuruza");p3.setFriend(p2);p1.setFriend(p2);p2.setFriend(p1);問題是在這種情況下調(diào)用 equals 方法,例如 p1.equals(p3) 會(huì)產(chǎn)生 StackOverflowException。如何在不必遇到此問題的情況下實(shí)現(xiàn)我的 equals 方法?我提前謝謝你。
查看完整描述

2 回答

?
當(dāng)年話下

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

由于p1'sfriend設(shè)置為p2,并且p2's friendto p1,您的equals()方法最終在兩個(gè)Person實(shí)例之間的無限調(diào)用循環(huán)中結(jié)束:

p1.equals(p2)調(diào)用p2.equals(p1)調(diào)用p1.equals(p2)(永遠(yuǎn) - 或者更確切地說,直到達(dá)到 JVM 當(dāng)前配置的堆棧大小限制,此時(shí)它將拋出一個(gè)StackOverflowException

現(xiàn)在的解決方案可能是直接測試朋友的獨(dú)特屬性,(fullname是目前唯一的其他屬性):

else if(!friend.fullName.equals(other.friend.fullName)

(...確保更新代碼以保護(hù)任何可能的空值當(dāng)然)


查看完整回答
反對 回復(fù) 2022-07-27
?
撒科打諢

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

真正的答案是根據(jù)現(xiàn)實(shí)對您的課程進(jìn)行建模。

實(shí)際上,定義一個(gè)人的真正方面是什么?!那將是身份,例如名稱。

你的朋友組合明天可以改變,但你仍然是你!

所以,換句話說:從比較中排除朋友字段。更好的是:考慮不要將這種關(guān)系寫為該類中的字段(如果有的話,它應(yīng)該是一個(gè)列表,而不是單個(gè)實(shí)例)。但如前所述,理想情況下,該信息超出了 person 類!


查看完整回答
反對 回復(fù) 2022-07-27
  • 2 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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