Две отдельные проблемы:
[1] цифра - строка;Другой номер телефона.они никогда не будут равны.То, что вы, вероятно, ищете, это other.digits.equals(this.digits)
.Теперь мы сравниваем цифры номера телефона A с цифрами номера телефона B: яблоки и яблоки.Это может сработать.
[2] сигнатура метода равно public boolean equals(Object other)
.Ваш метод equals имеет другую сигнатуру, что означает, что он является совершенно другим методом, не имеющим никакого отношения к реальному методу equals ... за исключением совпадения, что так случилось, что оно делится с ним именем.Это означает, что ваш «поддельный» метод equals не будет использоваться другим кодом, использующим методы equals.Например, метод contains
для arraylist.Решение состоит в том, чтобы сделать так, чтобы метод equals имел в качестве аргумента Object other
.
[3], когда вы это сделаете, вы не сможете вызвать .digits
для other
;в конце концов, только номера телефонов имеют цифры;любой случайный объект не гарантируется.Решение состоит в том, чтобы разыграть other
, но сделать это можно только после проверки, является ли это номер телефона:
public boolean equals(PhoneNumber other) {
if (!(other instanceof PhoneNumber)) {
// somebody is comparing apples to oranges. Obviously, then...
return false;
}
return ((PhoneNumber) other).digits.equals(this.digits);
}
. Обратите внимание, что для правильной работы такого объекта, скажем, HashSet
, выдолжен всегда переопределять как hashCode
, так и метод equals
, либо ни тот, ни другой.
Project Lombok автоматизирует все эти вещи, вас это может заинтересовать.