[推薦] Lombok 套件安裝與使用指南

開發 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();