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