Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Các bạn có cảm thấy lười biếng mỗi khi phải khai báo các phương thức Getter, Setter cho các class Java không? Các bạn có thấy nhàm chán khi làm việc với những đoạn code theo khuôn mẫu trong Java không? Nếu tất cả các câu trả lời là có thì hãy xem xét sử dụng Project Lombok. Nó sẽ giúp các bạn loại bỏ những công việc nhàm chán này.
Project Lombok là gì?
Project Lombok là một công cụ giúp chúng ta generate code một cách tự động nhưng không phải giống như các IDE làm cho chúng ta. Các IDE generate các phương thức Getter, Setter và một số phương thức khác trong các tập tin .java. Project Lombok cũng generate các phương thức đó nhưng là trong các tập tin .class file.
Trang chủ: https://projectlombok.org/
Tất cả công việc chúng ta cần làm chỉ là sử dụng một số annotation của Project Lombok như @Getter, @Setter, @Builder, … việc còn lại Project Lombok sẽ làm cho chúng ta. Tất nhiên, những thứ các bạn không muốn làm tự động thì bạn cũng có thể chỉ định để Project Lombok không generate chúng.
Để các IDE có thể hiểu được code do Project Lombok generate, các bạn cần cài đặt Project Lombok plugin cho chúng. Xem hướng dẫn cài đặt Project Lombok cho IntelliJ IDE ở đây.
Getter, Setter và Constructors với Project Lombok
Trong bài viết này, mình sẽ giới thiệu với các bạn cách sử dụng Project Lombok để generate các phương thức Setter, Getter và constructor trong một đối tượng Java một cách tự động.
Đầu tiên, mình sẽ tạo một Maven project để làm ví dụ:
với Project Lombok dependency như sau:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency>
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.
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 thì mình phải khai báo các thông tin này như sau:
package com.huongdanjava.lombok; import java.util.Date; public class Student { private String name; private String code; private Date dateOfBirth; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; } }
Ở đây có nhiều Java job với mức đãi ngộ hấp dẫn, apply ngay!
Với Project Lombok, mình có thể remove các phương thức Getter, Setter trong Student class và để cho Project Lombok tự generate chúng bằng cách sử dụng annotation @Getter và @Setter:
package com.huongdanjava.lombok; import lombok.Getter; import lombok.Setter; import java.util.Date; @Getter @Setter public class Student { private String name; private String code; private Date dateOfBirth; public Student(String name) { this.name = name; } }
và thêm một default constructor, một constructor với tất cả các thông tin của class Student bằng cách sử dụng các annotation @NoArgsConstructor và @AllArgsConstructor như sau:
package com.huongdanjava.lombok; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.util.Date; @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Student { private String name; private String code; private Date dateOfBirth; public Student(String name) { this.name = name; } }
Bây giờ, các bạn có thể sử dụng Student class với các phương thức Getter, Setter và constructor mà chúng ta đã định nghĩa với Project Lombok.
Ví dụ:
package com.huongdanjava.lombok; public class Example { public static void main(String[] args) { Student student = new Student(null, null, null); student.setName("Khanh"); System.out.println(student.getName()); } }
Kết quả:
package com.huongdanjava.lombok; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.util.Date; @NoArgsConstructor @AllArgsConstructor public class Student { private String name; @Getter @Setter private String code; private Date dateOfBirth; public Student(String name) { this.name = name; } }