Могу ли я использовать только ключевое поле для проверки равных?И могу ли я использовать equals через подклассы? - PullRequest
3 голосов
/ 25 июля 2011

У меня есть класс Player с некоторыми полями:

String name;
Point position;
Action action;

Поле 'name' является своего рода ключом, не может быть 2 игрока с одинаковым именем. Поэтому мне кажется, что они равны, если «имя» (вероятно, игнорируется) совпадает. Поэтому я использую только String.equalsIgnoreCase (String) или проверяю и другие поля?

1) Должен ли я проверять больше, чем поле имени в методе equals в Player?

2) Должен ли я выдать ошибку в методе equals, если другие поля не совпадают?

3) И разумно ли проверять это поле только для подклассов, потому что даже в подклассах одно и то же имя указывает на одного и того же игрока, или я должен выбрать другой метод для сравнения? Пример:

class MovingPlayer extends Player{
    Point destination;

Таким образом, поле 'name' по-прежнему является ключом (что-то вроде ключа между подклассами).

Заранее спасибо, Тьен

1 Ответ

2 голосов
/ 25 июля 2011
  1. Вам следует задать себе вопрос - возможно ли, чтобы в вашем приложении существовали два объекта с одним и тем же свойством name и двумя различными свойствами положения?Если это так, то вы должны реализовать метод equals для использования всех соответствующих полей.

  2. Вы не выдаете ошибку в методе equals.Вы возвращаете true или false.

  3. Ваши подклассы могут переопределить метод equals.В этом переопределенном методе вы можете проверять наличие суперклассов равных и только если они равны, вы продолжаете дополнительную проверку.

...