В соответствии с назначением мне нужно создать метод "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;
}
Являются ли dollars
и cents
примитивными long
типами?
Вы хотите использовать (доллары == otherObject.dollars) && (cents == otherObject.cents), если они есть. Вы не можете вызвать метод (например, equals()
) для примитива.
Поэтому обе ваши ошибки пытаются сказать вам, что по какой-то причине ваш класс 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()
, чтобы поддерживать их согласованность.
long
) полей, что и является причиной вашей новой ошибки.