Ваш метод equals нуждается в некоторых улучшениях. Вы должны проверить на ноль и сходство. Кроме того, использование instanceof может привести к тому, что equals станет некоммутативным, если вы разрешите создание подклассов и реализует equals в обоих классах. Например, если Card2 расширяет Card, и у Card есть равные, которые проверяют экземпляр Card, и Card2 переопределяет это с помощью равных, проверяющих экземпляр Card2, то для экземпляра cc2 класса Card2 и другого экземпляра cc Card используется instanceof означает что cc.equals (cc2) имеет значение true, а cc2.equals (cc) - false, что может привести к нежелательному поведению.
Вы можете сделать следующее:
public boolean equals(Object other) {
// null is not equal
if (null == other)
return false;
// same is equal
if (this == other)
return true;
// different class, not equal
if (other.getClass() != getClass())
return false;
В качестве альтернативы, если вы хотите разрешить создание подклассов, вам следует проверять только те свойства, которые находятся в суперклассе. Таким образом, если Card имеет значение, а Card2 расширяет Card и имеет значение и тип, тогда ваш метод equals должен искать только экземпляр Card и сравнивать только атрибуты Card:
//if (other.getClass() != getClass())
// return false;
if (!(other instanceof Card))
return false;
card = (Card) other;
if (this.getValue() == card.getValue())
return true;
return false;
}
Опять же, все это может быть совершенно не связано с вашей проблемой.