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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机插件下载(安卓手机插件)
- 下一篇: jdk 1.8 不可变常量_在JDK 1