開發 Java 專案的時候,時常在寫像是 POJO、DTO 與 DAO … 等物件的時候,都要為每一個參數寫上基本的 Getter 與 Setter,雖然些 IDE 可以用點選的方式產生,但是只能夠一個一個參數產生還是有點麻煩,而如果使用了 Lombok Library 的話,可以不用自己寫,只需要在 class 上標示 Annotation 就可以,對於程式碼也能更簡潔,本篇將接學如何開始使用 Lombok。
官方網站:https://projectlombok.org/
原始碼:https://github.com/rzwitserloot/lombok
安裝 IDE 套件
首先要安裝套件,如果沒有安裝套件的話,IDE會無法找到對應產生的函數而顯示錯誤,請依照自己使用的 IDE 是 Eclipse 或是 IntelliJ IDEA 來安裝
IntelliJ IDEA 安裝外掛
點選單中的 「Preferences…」 (如果是 Windows 或 Linux 則是 Setting)
到 Plugins 搜尋 lombok 並安裝
接著在Build Extension Deployment -> Compiler -> Annotation Process 中勾選 「Enable annotation processing」
Eclipse 安裝外掛
首先到 Lombok 網站上下載外掛: https://projectlombok.org/download
接著使用指令啟動 (或透過點擊兩下啟動)
java -jar lombok.jar
會跑出安裝視窗,它會偵測目前安裝的Eclipse的位置,點右 邊方的「Install / Update」
顯示 Install successful 便表示安裝完成
安裝中加入 Lombok Library
如果是使用 Maven,在 pom.xml 加入:
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> </dependencies>
而如果是使用 Gradle,在 build.gradle 中加入:
repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:1.18.12' annotationProcessor 'org.projectlombok:lombok:1.18.12' testCompileOnly 'org.projectlombok:lombok:1.18.12' testAnnotationProcessor 'org.projectlombok:lombok:1.18.12' }
使用 Lombok 的 @Annotation
下面介紹幾個較常使用的 @Annotation,這邊使用一個範例 class Student
來介紹各 Annotation 功能
public class Student { private String studentId; private String name; private Integer age; }
@Getter/@Setter
為該參數生出基本的 Getter 與 Setter 函數
例如下面的會生出 getStudentId()
與 setStudentId(String studentId)
public class Student { @Getter @Setter private String studentId; private String name; private Integer age; }
@ToString
會蓋過原本的 toString()
函數,輸出結果會是所有參數的資料
@ToString public class Student { private String studentId; private String name; private Integer age; }
@EqualsAndHashCode
會產生 equals 與 hashCode 兩個函數,可用來比較兩個相同物件內的所有成員變數是否相同
@EqualsAndHashCode public class Student { private String studentId; private String name; private Integer age; }
@NoArgsConstructor, @AllArgsConstructor
參生建構元,分別為無參數建構元,帶有全參數的建構元
@NoArgsConstructor @AllArgsConstructor public class Student { private String studentId; private String name; private Integer age; }
@Data
這會直接為這個 class 加上上 @ToString, @EqualsAndHashCode, @Getter, @Setter 以及 @RequiredArgsConstructor 的 Annotation
@Data public class Student { private String studentId; private String name; private Integer age; }
@Builder
產生 builder 函數,使物件可以使用流式接口 (fluent interface) 的方式代替傳統的建構元。
@Builder public class Student { private String studentId; private String name; private Integer age; }
這樣就可以使用這樣的方式產生物件
Student student = Student.builder() .studentId("K129132") .name("Bob") .age(20) .build();