La principale question originale est:
Est-il conseillé d'ajouter l'annotation @EqualsAndHashCode (callSuper = true) ou @EqualsAndHashCode (callSuper = false)?
La réponse acceptée est fondamentalement juste:
...ça dépend...
Pour développer cela, la documentation sur @EqualsAndHashCode propose des conseils solides sur le choix. Surtout cela, à mon humble avis:
En définissant callSuper sur true, vous pouvez inclure les méthodes equals et hashCode de votre superclasse dans les méthodes générées. Pour hashCode, le résultat de super.hashCode () est inclus dans l'algorithme de hachage, et Forequals, la méthode générée retournera false si la super implémentation pense qu'il n'est pas égal à l'objet passé. Sachez que toutes les implémentations égales ne gèrent pas correctement cette situation. Cependant, les implémentations d'égalité générées par lombok gèrent cette situation correctement, vous pouvez donc appeler votre superclasse égale en toute sécurité si elle possède également une méthode d'égalité générée par lombok.
Pour distiller un peu ceci: Choisissez 'callSuper = true' si vous héritez d'une superclasse qui n'a pas d'informations d'état, ou utilise elle-même l'annotation @Data, ou a des implémentations de equals / hash qui "gèrent la situation correctement" - ce que j'interprète comme signifiant renvoyer un hachage approprié des valeurs d'état.