推薦一款程式碼神器,程式碼量至少省一半!
在我們 Java 專案裡面,有很多 Java Bean 需要為每個屬性生成 get/ set 方法,增刪改屬性都需要維護這些 get/ set 方法甚是麻煩。
今天給大家介紹一款能幫助我們簡化這些程式碼的神器:Lombok!有了這個神器,你的 Java Bean 類的程式碼量至少可以省一半。
什麼是Lombok?
https://www.projectlombok.org/
開啟它的官網,這是它的簡介。
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
翻譯過來就是說,Lombok專案是一個 Java 庫,它能夠自動嵌入到你的 IDE 編輯器和編譯工具中。有了它,你再也不用寫 getter 或者 equals 方法了,還有 val 特性等。
總之,有了這個傢伙,可以省掉很多程式碼的編寫,大大減少了工作量和維護的難度。
如何使用Lombok?
1、安裝外掛和配置依賴
如上圖所示,Lombok支援所有主流的 IDE 開發工具及編譯構建工具。
在 IDEA 中安裝 Lombok 外掛,這樣在使用 Lombok 的時候就不會編譯報錯。
下面是 Maven 的依賴配置,在用 Maven 打包的時候也能自動生成需要的程式碼。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <scope>provided</scope> </dependency>
如果你使用了 Spring Boot,可以不用帶版本號,在 Spring Boot spring-boot-dependencies.pom
這個配置檔案裡面定義了 Lombok 依賴。
所以,你只需要繼承版本號即可,當然,有必要的話,你也可以自定義版本號。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency>
2、使用註解簡化程式碼
從 IDEA 中的 Lombok 外掛特性可以看到支援的註解。
Features @Getter and @Setter @FieldNameConstants @ToString @EqualsAndHashCode @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger @Data @Builder @Singular @Delegate @Value @Accessors @Wither @SneakyThrows from Intellij 14.1 @val from Intellij 15.0.2 @var from Intellij 14.1 @var from Intellij 2016.2 @UtilityClass Lombok config system Code inspections Refactoring actions (lombok and delombok)
也可以去 Lombok 對應的包裡面看所有支援的註解。
現在挑幾個講一下它們的用法吧!
@Getter 和 @Setter
@Getter @Setter public class User { private String name; private int age; ... // 無需生成 get/set 方法 }
新增 @Getter
和 @Setter
註解用在 Java Bean 類上面,無需生成 get/ set 方法,會自動生成所有的 get/ set 方法及一個預設的構造方法。
也可以用外掛來新增相應的註解。
來看下原始碼和生成後的程式碼對比。
@Getter
和 @Setter
註解也可以單獨使用在欄位上面,同樣也會生成對應的 get/ set 方法及一個預設的構造方法。
@ToString
使用在類上,預設生成所有非靜態欄位以下面的格式輸出,如:
public String toString(){ return "Person(userName=" + getUserName() + ", id=" + getId() + ", age=" + getAge() + ", address=" + getAddress() + ", memo=" + getMemo() + ")"; }
裡面也有很多引數,用來自定義輸出格式。
@NoArgsConstructor
用在類上,用來生成一個預設的無參構造方法。
@RequiredArgsConstructor
用在類上,使用類中所有帶有 @NonNull
註解和 final
型別的欄位生成對應的構造方法。
@AllArgsConstructor
用在類上,生成一個所有引數的構造方法,預設不提供無參構造方法。
@Data
用在類上,等同於下面這幾個註解合集。
- @Getter
- @Setter
- @RequiredArgsConstructor
- @ToString
- @EqualsAndHashCode
@Value
用在類上,等同於下面這幾個註解合集。
- @Getter
- @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE)
- @AllArgsConstructor
- @ToString @EqualsAndHashCode}
@NonNull
用在屬性上,用於欄位的非空檢查,如果傳入到 set 方法中的值為空,則丟擲空指標異常,該註解也會生成一個預設的構造方法。
還有很多,這裡不再撰述。
總結
本文介紹了 Lombok 及使用說明,更多的註解使用方式可以去原始碼裡面看吧,有了這個外掛,可以幫助你寫出更簡潔、更優雅、更漂亮的 Java 程式碼。
更多好工具分享請關注微信公眾號:Java技術棧,在後臺回覆關鍵字:工具,可以獲取獲取棧長整理的更多工具類乾貨。
本文原創首發於微信公眾號:Java技術棧(id:javastack),關注公眾號在後臺回覆 "工具" 可獲取更多,轉載請原樣保留本資訊。