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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lombok 简化代码_如何编写更少,更好的代码,或Project Lombok

發布時間:2023/12/3 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lombok 简化代码_如何编写更少,更好的代码,或Project Lombok 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lombok 簡化代碼

我長期以來一直打算寫有關Lombok的文章 ,以至于每當一個自重的Java開發人員都已經聽說過它時,我可能會寫它。 盡管如此,值得一提的是,如果只是提醒自己,不要猶豫,嘗試性能增強工具并查看它們是否合適, Lombok肯定會通過允許同時編寫更少的代碼并添加到Java中來增強Java編碼器的性能。它的質量,這不是小事。

Java反對者通常會說它的弱點是什么?

Java太冗長。
(c)每個Java對手

不幸的是,這句話有很多道理。 想象一下一個簡單的數據類,您想要存儲個人信息-名稱,年齡等。它看起來可能像這樣。

public class PersonSimple {private String lastName;private String firstName;private Integer age;public String getLastName() {return lastName;}public String getFirstName() {return firstName;}public Integer getAge() {return age;}public void setLastName(String lastName) {this.lastName = lastName;}public void setFirstName(String firstName) {this.firstName = firstName;}public void setAge(Integer age) {this.age = age;} }

好,你說。 我用IDE生成了所有這些東西,并不難。 但是我們還需要一個hashCode()equals() 。 因為您可能想將實例保留在集合中并檢查是否相等。 沒問題,大多數IDE都將允許您生成這些以及getter和setter。 它們將拋出toString()生成器,以幫助您輸出對象并查看其中的內容。

public class PersonSimple {private String lastName;private String firstName;private Integer age;public String getLastName() {return lastName;}public String getFirstName() {return firstName;}public Integer getAge() {return age;}public void setLastName(String lastName) {this.lastName = lastName;}public void setFirstName(String firstName) {this.firstName = firstName;}public void setAge(Integer age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;PersonSimple that = (PersonSimple) o;return Objects.equals(lastName, that.lastName) &&Objects.equals(firstName, that.firstName) &&Objects.equals(age, that.age);}@Overridepublic int hashCode() {return Objects.hash(lastName, firstName, age);}@Overridepublic String toString() {return "PersonSimple{" +"lastName='" + lastName + '\'' +", firstName='" + firstName + '\'' +", age=" + age +'}';} }

那好吧。 所有這些東西都是由IntelliJ IDEA生成的。 這不是那么困難吧? 好吧 但是現在您正在考慮Josh Bloch,并決定應用Builder模式 。 這次,您需要做一些手工工作。 最終您可能會得到的結果與此接近。

public class PersonSimple {private final String lastName;private final String firstName;private final Integer age;private PersonSimple(String lastName, String firstName, Integer age) {this.lastName = lastName;this.firstName = firstName;this.age = age;}public String getLastName() {return lastName;}public String getFirstName() {return firstName;}public Integer getAge() {return age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;PersonSimple that = (PersonSimple) o;return Objects.equals(lastName, that.lastName) &&Objects.equals(firstName, that.firstName) &&Objects.equals(age, that.age);}@Overridepublic int hashCode() {return Objects.hash(lastName, firstName, age);}@Overridepublic String toString() {return "PersonSimple{" +"lastName='" + lastName + '\'' +", firstName='" + firstName + '\'' +", age=" + age +'}';}public static class Builder {private String lastName;private String firstName;private Integer age;public Builder setLastName(String lastName) {this.lastName = lastName;return this;}public Builder setFirstName(String firstName) {this.firstName = firstName;return this;}public Builder setAge(Integer age) {this.age = age;return this;}public PersonSimple build() {return new PersonSimple(lastName, firstName, age);}} }

所以。 我們有一個生成器,現在我們的PersonSimple可以用這樣的一段代碼創建。

final PersonSimple john = new Person.Builder().setFirstName("John").setLastName("Doe").setAge(30).build();System.out.println(john);

但是您必須創建很多東西。 你有:

  • 具有全參數私有構造函數的數據類;
  • 數據類的三個獲取器;
  • 附帶三個二傳手的建設者班級;
  • 生成器類上的build()方法,該方法調用私有數據類的構造函數;
  • 盡管生成了hashCode(),equals()和toString()方法,但不要忘記。

該代碼現在需要70多行。 每次需要一個新字段時,都必須至少在三個地方進行處理-數據類中的getter,構建器類中的setter和構造函數。

如果我要向您展示如何對Lombok項目做同樣的事情怎么辦?

好,去

@Builder(toBuilder = true) @ToString @EqualsAndHashCode @AllArgsConstructor(access = AccessLevel.PRIVATE) public class Person {@NonNull@Getterprivate final String lastName;@NonNull@Getterprivate final String firstName;@NonNull@Getterprivate final Integer age; }
  • 我們使用@Builder注釋生成了構建器類。 toBuilder = true意味著我們另外創建了一個toBuilder()實例方法,該方法創建了一個builder類的新實例,并使用當前實例中的值進行了初始化。
  • 我們添加了帶有@ToString批注的toString()方法。
  • 我們添加了hashCode()equals()以及@EqualsAndHashCode 。
  • 我們使用@AllArgsConstructor(access = AccessLevel.PRIVATE)將所有參數的構造函數設為私有。
  • 我們使用@Getter注釋在類字段中添加了標準的getter。

現在是十五行代碼。 十五! 我們只是將代碼減少了五次。 對于具有很多領域的課程而言,收益會更好。

那么, Lombok計劃到底做什么? 在編譯期間生成所有樣板 ,從而使您避免手動編寫該代碼或使用IDE生成該代碼。 它節省了您很多時間,并允許您以更少的精力創建更漂亮的代碼。

將您的代碼打包后,可以這樣創建人員。

private static Person JOHN = Person.builder().firstName("John").lastName("Doe").age(30).build();

要將Lombok添加到您的項目中,您需要為其添加一個依賴項,在本例中,還需要為IDEA安裝一個Lombok插件 。 這里描述了 Gradle配置, 這里描述了 maven。

這里描述了Lombok的所有功能 。 請看一下是否還有其他有用的內容,因為我在這里描述的內容只是其中的一小部分。

來自示例的代碼存儲在我的github存儲庫中 。

祝您代碼簡潔明了!

翻譯自: https://www.javacodegeeks.com/2018/01/write-less-better-code-project-lombok.html

lombok 簡化代碼

總結

以上是生活随笔為你收集整理的lombok 简化代码_如何编写更少,更好的代码,或Project Lombok的全部內容,希望文章能夠幫你解決所遇到的問題。

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