2 回答

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
由于p1
'sfriend
設(shè)置為p2
,并且p2
's friend
to 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)然)

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 類!
添加回答
舉報(bào)