La principale domanda originale è:
È consigliabile aggiungere l'annotazione @EqualsAndHashCode (callSuper = true) o @EqualsAndHashCode (callSuper = false)?
La risposta accettata è fondamentalmente solo:
...dipende...
Per espandere questo aspetto , la documentazione su @EqualsAndHashCode ha alcune solide indicazioni su cui scegliere. Soprattutto questo, IMHO:
Impostando callSuper su true, puoi includere i metodi equals e hashCode della tua superclasse nei metodi generati. Per hashCode, il risultato di super.hashCode () è incluso nell'algoritmo hash e forequals, il metodo generato restituirà false se l'implementazione super pensa che non sia uguale all'oggetto passato. Tieni presente che non tutte le implementazioni uguali gestiscono correttamente questa situazione. Tuttavia, le implementazioni uguali generate da lombok gestiscono correttamente questa situazione, quindi puoi tranquillamente chiamare la tua superclasse uguale se anch'essa ha un metodo uguale generato da lombok.
Per riassumere questo un po ': scegli' callSuper = true 'se stai ereditando da una superclasse che non ha informazioni sullo stato, o sta usando l'annotazione @Data, o ha implementazioni di uguale / hash che "gestiscono la situazione correttamente" - che interpreto per indicare la restituzione di un hash corretto dei valori di stato.