Lombok
官網連結:https://projectlombok.org/
什麼是 Lombok
Lombok 是一個 Java 庫,它可以通過添加註解的方式,為 Java 類自動插入相應的 Getter/Setter,構造器,equals 方法等。這樣就省去了手動重建程式碼的麻煩,簡化開發,也是程式碼更為簡潔。
當然,Lombok 也支援使用註解為 Java 類新增 Builder,自動注入日誌記錄變數等。
為什麼使用Lombok (優劣)
優點
顯然,使用 Lombok 可以大量減少專案中的模版程式碼。雖然開發過程中可以通過 IDE 快速生成這些程式碼,但當 Java 類的變數發生變化,或者協作開發過程中有程式碼衝突,這無疑增加了我們無謂的工作量。
其次,Lombok 還可以增強程式碼的規範性,通過@Data
註解可以自動新增包括 toString 在內的模版方法,避免了這些方法缺失,也省去了因變數修改而修改toString,equals 方法的麻煩。
缺點
Lombok 的專案整合和使用,它需要 IDE 和專案都要支援。不過這不麻煩。
安裝
IntelliJ IDEA
-
開啟
File/Setting
或 快捷鍵Ctrl+Alt+S
-
選擇
Plugins
-
搜尋外掛
IntelliJ Lombok plugin
並安裝 - 重啟 IDEA 即完成
STS/Eclipse
- 下載lombok.jar
- 將 lombok.jar 放在sts(eclipse)安裝目錄下,和 sts.ini 檔案平級的
-
在lombok.jar 的目錄下,執行:
java -jar lombok.jar
,在彈出框中指定 STS/Eclipse 安裝目錄,點選安裝 -
檢視 sts.ini,正常情況應該多個一行配置:
-javaagent:XXX\lombok.jar
使用介紹
按使用頻率從上及下排列
@Data
@Data
是@ToString
,@EqualsAndHashCode
,所有欄位上加@Getter
,所有非 final 欄位加@Setter
和@RequiredArgsConstructor
的快捷方式。它提供了這些註解的預設配置,用於滿足最基本 Java 類配置。
注意:@Data 註解時,以$-
開頭的欄位不會被自動注入對應方法,包括 @Getter, @Setter, @ToString和@EqualsAndHashCode 內不會包含這個欄位。
@Getter @Setter
給欄位新增 Getter/Setter 方法,可以新增到類或欄位上。如果同時新增,以欄位上的配置為準。但都會被顯示宣告的方法覆蓋。
對於一些boolean
型別的欄位,需要注意is-
開頭的欄位。但對於引用型別 Boolean 無此影響。
@Getter @Setter public boolean isFlower; @Getter @Setter public Boolean isTree; // getter public boolean isFlower() { return this.isFlower; }; // setter public void setFlower(boolean isFlower) { this.isFlower = isFlower; } // getter public boolean getIsTree() { return this.isTree; }; // setter public void setIsTree(boolean isTree) { this.isTree = isTree; }
@Getter 和 @Setter 可以通過指定PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE, NONE
設定訪問許可權。
@ToString
新增toString
方法。
注意,如果一個類繼承父類,預設插入的toString
是不會新增父類欄位。要新增父類的欄位,需要使用@ToString(callSuper = true)
。
去除欄位名,可以設定includeFieldNames = false 預設為true
。
遮蔽欄位,可以在欄位宣告時新增@ToString.Exclude
。
@ToString.Exclude private String name;
@EqualsAndHashCode
新增equals
和hashCode
方法。
預設情況下,任何以$符號開頭的變數都會自動排除。只能通過標記來包含它們@EqualsAndHashCode.Include
。
@EqualsAndHashCode.Exclude
用來遮蔽指定欄位。
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
新增構造方法。
設定access = AccessLevel.PRIVATE
可以指定構造方法的訪問許可權。許可權包括(PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE, NONE),預設 PUBLIC。
@AllArgsConstructor
會替換掉預設的無參構造方法。如需同時存在無參構造方法和有參構造方法,可以同時新增@NoArgsConstructor
。
注意事項
- 優先順序:顯示宣告>欄位上加註解>類上加註解
更多使用的用例,可以查詢官網的詳細內容。