日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用Project Lombok减少Java应用程序中的样板代码

發布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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应用程序中的样板代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。