Основне оригінальне питання:
Чи доцільно додавати анотацію @EqualsAndHashCode (callSuper = true) або @EqualsAndHashCode (callSuper = false)?
Прийнята відповідь в основному просто:
...це залежить...
Щоб розширити це, у документації на @EqualsAndHashCode є кілька вагомих вказівок щодо вибору. Особливо це, ІМХО:
Встановивши для callSuper значення true, ви можете включити в згенеровані методи методи equals і hashCode вашого суперкласу. Для hashCode результат super.hashCode () включається в алгоритм хешування, і forequals, згенерований метод поверне false, якщо супер реалізація вважає, що він не дорівнює переданому в об'єкті. Майте на увазі, що не всі рівні реалізації правильно обробляють цю ситуацію. Однак реалізації згенерованих lombok рівних дійсно обробляють цю ситуацію належним чином, тому ви можете сміливо назвати свій суперклас рівними, якщо він теж має метод рівних генерованого ломбоком.
Щоб трохи перегнати це: Виберіть 'callSuper = true', якщо ви успадковуєте суперклас, який або не має інформації про стан, або сам використовує анотацію @Data, або має реалізації equals / hash, які "правильно обробляють ситуацію" - що я трактую як означає повернення належного хешу державних цінностей.