Główne pierwotne pytanie brzmi:
Czy warto dodać adnotację @EqualsAndHashCode (callSuper = true) lub @EqualsAndHashCode (callSuper = false)?
Przyjęta odpowiedź jest w zasadzie po prostu:
...to zależy...
Aby to rozwinąć, dokumentacja @EqualsAndHashCode zawiera solidne wskazówki dotyczące wyboru. Szczególnie to, IMHO:
Ustawiając callSuper na true, możesz uwzględnić metody equals i hashCode swojej nadklasy w generowanych metodach. W przypadku hashCode wynik super.hashCode () jest zawarty w algorytmie wyznaczania wartości skrótu, a znaki równościowe, wygenerowana metoda zwróci wartość false, jeśli super implementacja uzna, że nie jest równy przekazanemu w obiekcie. Należy pamiętać, że nie wszystkie implementacje equals radzą sobie w tej sytuacji poprawnie. Jednak implementacje równań generowane przez lombok obsługują tę sytuację poprawnie, więc możesz bezpiecznie wywołać równość swojej nadklasy, jeśli ona również ma metodę równości wygenerowaną przez lombok.
Aby to nieco sprecyzować: wybierz opcję „callSuper = true”, jeśli dziedziczenie z nadklasy, która albo nie ma informacji o stanie, albo sama używa adnotacji @Data, albo ma implementacje równości / hash, które „prawidłowo radzą sobie z sytuacją” - co interpretuję jako zwracanie właściwego skrótu wartości stanu.