В `equals(T value)`, T должен быть Object, или это может быть как City и т. Д.?
Я пытаюсь понять equals()
метод лучше. Все примеры, которые я видел, делают что-то вроде:
public class City
{
public boolean equals(Object other)
{
if (other instanceof City && other.getId().equals(this.id))
{
return true;
}
// ...
}
}
Должен ли метод взять объект, а не город?
Например, это ниже не допускается?
public class City
{
public boolean equals(City other)
{
if (other == null)
{
return false;
}
return this.id.equals(other.getId());
}
}
3 ответа
Решение
Да, это должно быть Object
, Иначе ты не переопределяешь реальное Object#equals()
Скорее перегружает его.
Если вы только перегружаете его, то он не будет использоваться стандартными API, такими как Collection API и т. Д.
Смежные вопросы:
- Переопределить или перегрузить
equals()
? - Как переопределить
equals()
а такжеhashCode()
?
Вы можете иметь оба: (см. комментарий poke выше)
public class City
{
public boolean equals(Object other)
{
return (other instanceof City) && equals((City)other) ;
}
public boolean equals(City other)
{
return other!=null && this.id.equals(other.getId());
}
}
Не берите ничего, кроме Object
если вы хотите переопределить equals()!
Написание специализированного метода equals () является распространенной ошибкой, но имеет тенденцию нарушать контракт equals ().