Создание метода равных

1

В соответствии с назначением мне нужно создать метод "equals", чтобы сделать следующее:

Метод сравнивает переменные экземпляра вызывающего объекта с переменными экземпляра объекта параметра для равенства и возвращает true если доллары и центы вызывающего объекта совпадают с долларами и центами объекта параметра. В противном случае возвращается false.

ОБНОВЛЕНИЕ: Я допустил ошибку и поставил неправильную вещь, обновил ее. Появилась новая ошибка:

Money.java:115: error: long cannot be dereferenced
  if (dollars.equals(otherObject.dollars) &&
             ^
Money.java:116: error: long cannot be dereferenced
     cents.equals(otherObject.cents))
          ^
2 errors

С помощью метода:

   public boolean equals(Money otherObject)
{
  boolean status;

  if (dollars.equals(otherObject.dollars) &&
     cents.equals(otherObject.cents))
    return status = true;
  else
    return status = false;
}
Теги:
equals

2 ответа

1
Лучший ответ

Являются ли dollars и cents примитивными long типами?

Вы хотите использовать (доллары == otherObject.dollars) && (cents == otherObject.cents), если они есть. Вы не можете вызвать метод (например, equals()) для примитива.

1

Поэтому обе ваши ошибки пытаются сказать вам, что по какой-то причине ваш класс Money не имеет поля, называемого symbol. Поэтому я бы подтвердил, что имя этого поля находится перед чем-либо еще и исправляет это.

Вам также нужен return status; как указано в комментариях ниже вашего вопроса.

Наконец, и, возможно, требуя самого большого изменения всего, у вас нет подписи метода для equals() правильно. Как вы можете видеть из JavaDoc, этот метод предназначен для использования Object как параметра, а не другого экземпляра Money. Обычно вы делаете что-то вроде следующего:

@Override
public boolean equals(Object object) {
    if (object == null || !(object instanceof Money)) {
        return false;
    }

    Money other = (Money) object;

    return this.value.equals(other.value)
            && this.secondField.equals(other.secondField)
            && this.primitiveField == other.primitiveField;
}

Поскольку примитивные типы (int s, long s и т.д.) Не имеют на них каких-либо методов (в том числе .equals(), вам нужно сравнить эти поля с использованием == а не .equals(), как показано в примере выше,

Это не самое полное решение (есть много хорошей информации, отвечающей на этот вопрос), и вы должны также переопределить Object.hashCode() если вы Object.hashCode() equals(), чтобы поддерживать их согласованность.

  • 0
    Я проверил, я не знаю, почему я поставил символ. Мои 2 поля экземпляра - длинные, называемые «долларами» и «центами». Это вызвало новую ошибку, поэтому я могу внести изменения. Должен рассеянно поставить символ.
  • 0
    @WillBro Обновлен, чтобы включить сравнение примитивных (например, long ) полей, что и является причиной вашей новой ошибки.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню