使用Project Lombok减少Java应用程序中的样板代码
 對Java編程語言最常提出的批評之一是它需要大量的樣板代碼 。 對于簡單的類尤其如此,該類只需要存儲一些值就可以。 您需要這些值的getter和setter,也許您還需要一個構造函數,覆蓋equals()和 
 hashcode()通常是必需的,也許您想要一個更有用的toString()實現。 最后,您可能有100行代碼,可以用10行Scala或Groovy代碼重寫。 諸如Eclipse或IntelliJ的Java IDE試圖通過提供各種類型的代碼生成功能來減少此問題。 但是,即使您不必自己編寫代碼,如果在IDE中打開這樣的文件,也始終會看到它(并被它分散注意力)。 
 Lombok項目 (不要被丑陋的網頁嚇到)是一個小型Java庫,可以幫助減少Java應用程序中的樣板代碼量。 Lombok項目提供了一組注釋,這些注釋在開發時會進行處理,以將代碼注入Java應用程序中。 注入的代碼可立即在您的開發環境中使用。 
讓我們看一下下面的Eclipse屏幕截圖:
  
 定義的類使用Lombok的@Data注釋進行注釋,并且最多包含三個私有字段。 @Data自動注入getter,setter(用于非final字段),equals(),hashCode(),toString()和用于初始化final dateBirth字段的構造函數。 如您所見,生成的方法可直接在Eclipse中使用,并顯示在Outline視圖中。 
設定
要為您的應用程序設置Lombok,必須將lombok.jar放入類路徑。 如果您使用的是Maven,則只需將以下依賴項添加到pom.xml中:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.14.6</version><scope>provided</scope> </dependency>您還需要在使用的IDE中設置Lombok:
- NetBeans用戶只需在其項目屬性中啟用“在編輯器中啟用注釋處理”選項即可(請參閱: NetBeans說明 )。
 - Eclipse用戶可以通過雙擊lombok.jar并遵循快速安裝向導來安裝Lombok。
 - 對于IntelliJ,可以使用Lombok插件 。
 
入門
簡介中顯示的@Data注釋實際上是各種其他Lombok注釋的快捷方式。 有時@Data做得太多。 在這種情況下,您可以使用更具體的Lombok注釋,從而為您提供更大的靈活性。
使用@Getter和@Setter可以實現僅生成getter和setter:
@Getter @Setter public?class?Person?{private?final?LocalDate?birthday;private?String?firstName;private?String?lastName;public?Person(LocalDate?birthday)?{this.birthday?=?birthday;} }請注意,布爾字段的getter方法以is代替get的前綴(例如isFoo()代替getFoo())。 如果只想為特定字段生成getter和setter,則可以注釋這些字段而不是類。
生成equals(),hashCode()和toString():
@EqualsAndHashCode @ToString public?class?Person?{... }@EqualsAndHashCode和@ToString也具有各種可用于自定義其行為的屬性:
@EqualsAndHashCode(exclude?=?{"firstName"}) @ToString(callSuper?=?true,?of?=?{"firstName",?"lastName"}) public?class?Person?{... }在此,equals()和hashCode()不會考慮字段firstName。 toString()將首先調用super.toString(),并且僅考慮firstName和lastName。
對于生成構造函數,可以使用多個注釋:
- @NoArgsConstructor生成不帶參數的構造函數(默認構造函數)。
 - @RequiredArgsConstructor為所有未初始化的最終字段生成一個帶有一個參數的構造函數。
 - @AllArgsConstructor為類中的所有字段生成一個帶有一個參數的構造函數。
 
@Data批注實際上是@ ToString,@ EqualsAndHashCode,@ Getter,@ Setter和@RequiredArgsConstructor的常用快捷方式。
如果您喜歡不可變的類,則可以使用@Value代替@Data:
@Value public?class?Person?{LocalDate?birthday;String?firstName;String?lastName; }@Value是@ ToString,@ EqualsAndHashCode,@ AllArgsConstructor,@ FieldDefaults(makeFinal = true,level = AccessLevel.PRIVATE)和@Getter的快捷方式。
因此,使用@Value可以獲取toString(),equals(),hashCode(),getter和具有每個字段一個參數的構造函數。 默認情況下,它也將所有字段設置為私有和最終,因此您不必添加私有或最終修飾符。
看Lombok的實驗特征
除了到目前為止顯示的受支持的注釋之外,Lombok還具有一些實驗功能,可以在“ 實驗功能”頁面上找到它們。
我特別喜歡的這些功能之一是@Builder批注,它提供了Builder Pattern的實現。
@Builder public?class?Person?{private?final?LocalDate?birthday;private?String?firstName;private?String?lastName; }@Builder生成一個靜態builder()方法,該方法返回一個生成器實例。 此構建器實例可用于構建帶有@Builder注釋的類的對象(此處為Person):
Person?p?=?Person.builder().birthday(LocalDate.of(1980,?10,?5)).firstName("John").lastName("Smith").build();順便說一句,如果您想知道LocalDate類是什么,就應該看看我有關Java 8日期和時間API的博客文章!
結論
Lombok計劃基于注釋注入生成的方法,例如getter和setter。 它提供了一種簡便的方法,可顯著減少Java應用程序中的樣板代碼。
請注意,這樣做有一個弊端:根據reddit評論 (包括項目作者的評論),Lombok必須依靠各種黑客手段才能完成工作。 因此,將來的JDK或IDE版本可能會破壞項目Lombok的功能。 另一方面,這些評論是5年前發表的,而Lombok計劃仍在積極維護。
- 您可以在GitHub上找到Project Lombok的源代碼。
 
翻譯自: https://www.javacodegeeks.com/2014/09/reduce-boilerplate-code-in-your-java-applications-with-project-lombok.html
總結
以上是生活随笔為你收集整理的使用Project Lombok减少Java应用程序中的样板代码的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 集成灶备案要什么资料(集成灶备案)
 - 下一篇: 使用Spring Boot和Spring