很多小伙伴在學(xué)習(xí) javabean 的時候,會發(fā)現(xiàn)在開發(fā) Javabean 類的過程中,很大部分是在做變量的?getter/setter
?。這樣重復(fù)的工作是繁瑣且低效的,而且要維護(hù)的時候往往難以閱讀,當(dāng)屬性多時這樣的情況尤為明顯。那么有沒有辦法,自動生成這樣的方法呢?有!那就是今天小編要提到的 lombok。通過引入 lombok,使用 lombok 的注解,可以完全免去寫這些重復(fù)代碼的煩惱。接下來就跟隨小編一起學(xué)習(xí) lombok 吧!
原理
lombok 可以通過注解的方式,在編譯的時候為屬性生成構(gòu)造器、?getter
?/?setter
?、?equals
?、?hashcode
?、?toString
?方法。這樣我們就不用再手動去寫這些方法了。
引用
lombok 的使用需要引用 jar 包,可以在官網(wǎng)下載,也可以使用 maven 添加對應(yīng)依賴。
官網(wǎng)鏈接:https://projectlombok.org/download
maven 依賴:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
使用
在類上使用?@Data
?注解,會為類的所有屬性自動生成?setter
?/?getter
?、?equals
?、?canEqual
?、?hashCode
?、?toString
?方法(如為?final
?屬性,則不會為該屬性生成?setter
?方法)。
public class DataExample {
private final String name;
private int age;
private double score;
private String[] tags;
public DataExample(String name) {this.name = name;}
public String getName() {return this.name;}
public void setAge(int age) {this.age = age;}
public int getAge() {return this.age;}
public void setScore(double score) {this.score = score;}
public double getScore() {return this.score;}
public String[] getTags() {return this.tags;}
public void setTags(String[] tags) {this.tags = tags;}
}
上面的代碼是一個簡單的 pojo 類,當(dāng)我們使用 lombok 之后:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
public class DataExample {
private final String name;
private int age;
private double score;
private String[] tags;
}
有沒有發(fā)現(xiàn)?代碼量瞬間減少了一半?其實使用?@Data
?生成的代碼遠(yuǎn)不止這些,他還生成了?equals
?、?canEqual
?、?hashCode
?、?toString
?的方法,在 IDE 中可以嘗試調(diào)用一下就能發(fā)現(xiàn)了。
?@Data
?注解的目標(biāo)是生成全部需要自動生成的代碼,但是有時候我們并不需要完全自動生成,這時候就可以使用單個的修飾符來注解了。
@Data集合了?
@ToString
?、?@EqualsAndHashCode
?、?@Getter/@Setter
?、?@RequiredArgsConstructor
?的所有特性。換言之,這些注解也可以單個使用,接下來以?@Getter
?/?@Setter
?為例來介紹一下上面代碼可以化簡成什么樣子。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
public class DataExample {
@Getter
private final String name;
@Getter @Setter
private int age;
@Getter @Setter
private double score;
@Getter @Setter
private String[] tags;
}
小結(jié)
通過使用 lombok 注解,可以大大簡化 java 代碼,提高 java 開發(fā)效率。但是,lombok 也有很多缺點,他不支持多種參數(shù)構(gòu)造器的重載;而且代碼使用 lombok 后隱去了很多方法,這樣不利于源代碼的完整性和可讀性,降低了閱讀源代碼的舒適度。此外,lombok 的使用上還需要 IDE 支持,所以他本質(zhì)上更類似于一種 IDE 插件。
總之,仁者見仁智者見智,喜歡 lombok 的就多多使用,不喜歡的也可以使用編譯器提供的快捷鍵協(xié)助生成 getter/setter 方法。
更多精彩內(nèi)容關(guān)注W3C技術(shù)頭條!