#java #inheritance #sonarqube #equals
#java #наследование #sonarqube #равно
Вопрос:
Я очищал код системы, в которой я работаю, устраняя некоторые проблемы с инструментом Sonar, и я наткнулся на следующее сообщение:
Переопределите метод «equals» в этом классе
Я провел некоторое исследование, но ничего, что ответило бы на «почему» в этой заметке
Мы используем родительский класс, EqualsBuilder
который предоставляет EqualsBuilder.reflectionEquals
, поэтому исправление заключается в том, чтобы просто объявить метод перезаписанным путем передачи equals
метода родительского класса
@Override
public boolean equals (Object o) {
return super.equals (o);
}
по гарантии я также перезаписываю метод hashCode, но таким же образом передаю ответственность родительскому классу (тот же случай для reflectionHashCode HashCodeBuilder.reflectionHashCode
)
@Override
public int hashCode () {
return super.hashCode ();
}
Но все же мой вопрос остается, почему я должен переопределять этот метод, если это может быть достигнуто при наследовании?
Заранее благодарю вас
Комментарии:
1. Нет особого смысла переопределять
equals
иhashCode
просто возвращать реализацию суперкласса. Должен ли ваш класс переопределять эти методы, зависит от того, что делает ваш класс и как он должен работать. Возможно, рекомендация просто неуместна в вашем случае.2. Есть ли у подкласса какие-либо дополнительные свойства? Если это так, это может быть причиной, по которой Sonar подозревает здесь ошибку.
3. @Thomas нет, больше ничего нет
Ответ №1:
Просто простой взлом, поскольку в super
классе есть @Override
equals
и hashCode
.
добавьте его в класс (если вы уже используете Lombok
):
@EqualsAndHashCode(callSuper = false)
если только класс подкласса не имеет своего собственного equals
и hashCode
.