我正在製作一款紙牌遊戲,其中紙牌被表示爲JLabels,具有在遊戲過程中更改的名稱和一些其他屬性。我想將平等定義爲簡單地比較兩張牌的全名(由字段fullName
表示)。但是,這給我帶來的問題是我無法兩次添加相同的卡(因爲我在卡類中有其他字段可能不同)。等同於向JPanel添加組件的問題?
顯然,JPanel在後臺做了一些關於equals
的檢查。然後,我唯一的id
字段添加到每個卡,並在課堂上我保持一種我
private static Map<AbstractCard, Integer> idCount = new HashMap<AbstractCard, Integer>();
,然後每一個特定卡的構造函數被調用時創建的多少卡跟蹤我增加值在idCount
。但是,如果我添加id
以及原始name
的支票,不僅地圖會中斷,而且如果名稱相同,它仍然不會添加多張卡片。這就是現在的方法:
/**
* Compares this card to the specified object. The result is true if and only if
* the argument is not null and is a Card object that represents the same full name
* as this card.
* @return true if the cards are equal, otherwise false
*/
@Override
public boolean equals(Object o)
{
if (!(o instanceof AbstractCard))
return false;
else
{
AbstractCard c = (AbstractCard)o;
return this.fullName.equals(c.fullName) && this.id == c.id;
}
}
有關如何解決這個問題的任何想法?
編輯:我的hashCode
返回fullName.hashCode()
和在當前版本我加id
。
你的意思是你的卡片擴展了'JLabel'? – 2010-01-26 17:46:25
對,對不起,我在發佈問題後不久編輯了它。 – 2010-01-26 17:50:14