Pertanyaan asli utamanya adalah:
Apakah sebaiknya menambahkan anotasi @EqualsAndHashCode (callSuper = true) atau @EqualsAndHashCode (callSuper = false)?
Jawaban yang diterima pada dasarnya hanya:
...itu tergantung...
Untuk memperluasnya, dokumentasi di @EqualsAndHashCode memiliki beberapa panduan yang solid untuk dipilih. Terutama ini, IMHO:
Dengan menyetel callSuper ke true, Anda bisa menyertakan metode sama dengan dan hashCode superclass Anda dalam metode yang dihasilkan. Untuk hashCode, hasil super.hashCode () dimasukkan ke dalam algoritma hash, dan forequals, metode yang dihasilkan akan mengembalikan nilai false jika implementasi super menganggapnya tidak sama dengan yang diteruskan dalam objek. Ketahuilah bahwa tidak semua implementasi yang sama menangani situasi ini dengan benar. Namun, implementasi sama yang dihasilkan lombok menangani situasi ini dengan benar, sehingga Anda dapat dengan aman memanggil superclass equals jika juga, memiliki metode sama yang dihasilkan lombok.
Untuk sedikit menyaringnya: Pilih 'callSuper = true' jika Anda mewarisi dari superclass yang tidak memiliki informasi status, atau dirinya sendiri menggunakan anotasi @Data, atau memiliki implementasi sama dengan / hash yang "menangani situasi dengan benar" - yang saya tafsirkan sebagai mengembalikan hash yang tepat dari nilai negara bagian.