Câu hỏi ban đầu chính là:
Có nên thêm chú thích @EqualsAndHashCode (callSuper = true) hoặc @EqualsAndHashCode (callSuper = false) không?
Câu trả lời được chấp nhận về cơ bản chỉ là:
...mà phụ thuộc...
Để mở rộng điều đó, tài liệu về @EqualsAndHashCode có một số hướng dẫn chắc chắn về cách chọn. Đặc biệt là điều này, IMHO:
Bằng cách đặt callSuper thành true, bạn có thể bao gồm các phương thức bằng và mã băm của lớp cha của bạn trong các phương thức đã tạo. Đối với hashCode, kết quả của super.hashCode () được bao gồm trong thuật toán băm và các hàm trước, phương thức được tạo sẽ trả về false nếu siêu triển khai cho rằng nó không bằng đối tượng được truyền vào. Lưu ý rằng không phải tất cả các triển khai bằng đều xử lý tình huống này đúng cách. Tuy nhiên, các triển khai bằng do lombok tạo ra xử lý tình huống này đúng cách, vì vậy bạn có thể an toàn gọi lớp siêu của mình bằng bằng nếu nó cũng có phương thức bằng do lombok tạo.
Để chắt lọc điều này một chút: Chọn 'callSuper = true' nếu bạn đang kế thừa từ lớp cha không có thông tin trạng thái hoặc chính nó đang sử dụng chú thích @Data hoặc có triển khai bằng / băm "xử lý tình huống đúng cách" - mà tôi giải thích có nghĩa là trả về một băm thích hợp của các giá trị trạng thái.