Project Lombok với các phương thức toString(), equals() và hashCode()

Khi làm với với các đối tượng Java, rất nhiều trường hợp chúng ta cần phải định nghĩa các phương thức toString(), equals() và hashCode()… Những phương thức này có thể được thêm vào các đối tượng Java một cách tự động bằng cách sử dụng Project Lombok. Cách làm sẽ như thế nào? Trong bài viết này, mình sẽ hướng dẫn các bạn!

Đầu tiên, mình sẽ tạo một Maven project để làm ví dụ:

Project Lombok với các phương thức toString(), equals() và hashCode()

với Project Lombok dependency như sau:

Các bạn hãy nhớ là chúng ta cần phải install Project Lombok plugin vào trong IDE của chúng ta để IDE có thể hiểu và không bị lỗi compile. Xem hướng dẫn cài đặt Project Lombok plugin trong IntelliJ IDE ở đây nhé các bạn!

Bây giờ, ví dụ mình có class Student với một số thông tin như sau: name, code, dateOfBirth. Nếu không sử dụng Project Lombok, mình phải khai báo các phương thức toString(), equals() và hashCode() (các phương thức Getter, Setter và constructor mình đã định nghĩa với Project Lombok) như sau:

Chúng ta có thể để cho Project Lombok tự động làm việc này bằng cách sử dụng annotation @ToString và @EqualsAndHashCode như sau:

  • @ToString: annotation này sẽ giúp chúng ta generate phương thức toString() với tất cả các field của đối tượng Java. Chúng ta sẽ không cần phải quan tâm tới phương thức này mỗi khi chúng ta thêm mới hoặc loại bỏ một số field cho đối tượng Java.
  • @EqualsAndHashCode: annotation này sẽ giúp chúng ta generate phương thức equals() và hashCode() với tất các field không phải là static hoặc transient của đối tượng Java một cách tự động.

Bây giờ, nếu các bạn kiểm tra thư mục /target/classes/com/huongdanjava/lombok, các bạn sẽ thấy nội dung của Student class như sau:

Các bạn có thể thấy, bởi vì field code trong class Student của mình được khai báo với từ khoá transient nên khi generate phương thức equals() và phương thức hashCode(), field này đã không được include.

Bây giờ, nếu chúng ta có 2 đối tượng Student khác code nhưng cùng name và dateOfBirth thì khi so sánh 2 đối tượng này, chúng sẽ bằng nhau.

Ví dụ:

Kết quả:

Project Lombok với các phương thức toString(), equals() và hashCode()

Các bạn có thể loại bỏ một số field mà chúng ta muốn chúng không được include khi generate các phương thức toString(), equals() hay hashCode(). Để làm được điều này, các bạn cần khai báo thêm thuộc tính “exclude” trong các annotation @ToString và @EqualsAndHashCode.

Ví dụ như giờ mình muốn exclude field dateOfBirth trong class Student, mình sẽ khai báo như sau:

Bây giờ, nếu các bạn kiểm tra thư mục /target/classes/com/huongdanjava/lombok, các bạn sẽ thấy class Student có nội dung như sau:

Add Comment