lombok 简化代码_如何编写更少,更好的代码,或Project Lombok
lombok 簡(jiǎn)化代碼
我長期以來一直打算寫有關(guān)Lombok的文章 ,以至于每當(dāng)一個(gè)自重的Java開發(fā)人員都已經(jīng)聽說過它時(shí),我可能會(huì)寫它。 盡管如此,值得一提的是,如果只是提醒自己,不要猶豫,嘗試性能增強(qiáng)工具并查看它們是否合適, Lombok肯定會(huì)通過允許同時(shí)編寫更少的代碼并添加到Java中來增強(qiáng)Java編碼器的性能。它的質(zhì)量,這不是小事。
Java反對(duì)者通常會(huì)說它的弱點(diǎn)是什么?
Java太冗長。
(c)每個(gè)Java對(duì)手
不幸的是,這句話有很多道理。 想象一下一個(gè)簡(jiǎn)單的數(shù)據(jù)類,您想要存儲(chǔ)個(gè)人信息-名稱,年齡等。它看起來可能像這樣。
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生成了所有這些東西,并不難。 但是我們還需要一個(gè)hashCode()和equals() 。 因?yàn)槟赡芟雽?shí)例保留在集合中并檢查是否相等。 沒問題,大多數(shù)IDE都將允許您生成這些以及getter和setter。 它們將拋出toString()生成器,以幫助您輸出對(duì)象并查看其中的內(nèi)容。
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生成的。 這不是那么困難吧? 好吧 但是現(xiàn)在您正在考慮Josh Bloch,并決定應(yīng)用Builder模式 。 這次,您需要做一些手工工作。 最終您可能會(huì)得到的結(jié)果與此接近。
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);}} }所以。 我們有一個(gè)生成器,現(xiàn)在我們的PersonSimple可以用這樣的一段代碼創(chuàng)建。
final PersonSimple john = new Person.Builder().setFirstName("John").setLastName("Doe").setAge(30).build();System.out.println(john);但是您必須創(chuàng)建很多東西。 你有:
- 具有全參數(shù)私有構(gòu)造函數(shù)的數(shù)據(jù)類;
- 數(shù)據(jù)類的三個(gè)獲取器;
- 附帶三個(gè)二傳手的建設(shè)者班級(jí);
- 生成器類上的build()方法,該方法調(diào)用私有數(shù)據(jù)類的構(gòu)造函數(shù);
- 盡管生成了hashCode(),equals()和toString()方法,但不要忘記。
該代碼現(xiàn)在需要70多行。 每次需要一個(gè)新字段時(shí),都必須至少在三個(gè)地方進(jìn)行處理-數(shù)據(jù)類中的getter,構(gòu)建器類中的setter和構(gòu)造函數(shù)。
如果我要向您展示如何對(duì)Lombok項(xiàng)目做同樣的事情怎么辦?
好,去
@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注釋生成了構(gòu)建器類。 toBuilder = true意味著我們另外創(chuàng)建了一個(gè)toBuilder()實(shí)例方法,該方法創(chuàng)建了一個(gè)builder類的新實(shí)例,并使用當(dāng)前實(shí)例中的值進(jìn)行了初始化。
- 我們添加了帶有@ToString批注的toString()方法。
- 我們添加了hashCode()和equals()以及@EqualsAndHashCode 。
- 我們使用@AllArgsConstructor(access = AccessLevel.PRIVATE)將所有參數(shù)的構(gòu)造函數(shù)設(shè)為私有。
- 我們使用@Getter注釋在類字段中添加了標(biāo)準(zhǔn)的getter。
現(xiàn)在是十五行代碼。 十五! 我們只是將代碼減少了五次。 對(duì)于具有很多領(lǐng)域的課程而言,收益會(huì)更好。
那么, Lombok計(jì)劃到底做什么? 它在編譯期間生成所有樣板 ,從而使您避免手動(dòng)編寫該代碼或使用IDE生成該代碼。 它節(jié)省了您很多時(shí)間,并允許您以更少的精力創(chuàng)建更漂亮的代碼。
將您的代碼打包后,可以這樣創(chuàng)建人員。
private static Person JOHN = Person.builder().firstName("John").lastName("Doe").age(30).build();要將Lombok添加到您的項(xiàng)目中,您需要為其添加一個(gè)依賴項(xiàng),在本例中,還需要為IDEA安裝一個(gè)Lombok插件 。 這里描述了 Gradle配置, 這里描述了 maven。
這里描述了Lombok的所有功能 。 請(qǐng)看一下是否還有其他有用的內(nèi)容,因?yàn)槲以谶@里描述的內(nèi)容只是其中的一小部分。
來自示例的代碼存儲(chǔ)在我的github存儲(chǔ)庫中 。
祝您代碼簡(jiǎn)潔明了!
翻譯自: https://www.javacodegeeks.com/2018/01/write-less-better-code-project-lombok.html
lombok 簡(jiǎn)化代碼
總結(jié)
以上是生活随笔為你收集整理的lombok 简化代码_如何编写更少,更好的代码,或Project Lombok的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机插件下载(安卓手机插件)
- 下一篇: Linux 交换分区(linux 分区