Я делаю карточную игру, в которой карты представлены в виде JLabels с именами и некоторыми другими атрибутами, которые меняются во время игры. Я хочу определить равенство как простое сравнение полных имен (представленных полем fullName
) двух карточек. Однако из-за этого возникает проблема, заключающаяся в том, что я не могу добавить одну и ту же карту дважды (поскольку у меня есть другие поля в классе карт, которые могут отличаться).
Очевидно, что 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;
}
}
Есть мысли о том, как решить эту проблему?
РЕДАКТИРОВАТЬ: My hashCode
возвращает fullName.hashCode()
и в текущей версии я добавляю id
.