Проблема с Sonar: «Переопределение метода «equals» в этом классе

#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 .