App下載

如何簡(jiǎn)化你的java代碼?lombok使用介紹!

猿友 2021-07-07 14:36:46 瀏覽數(shù) (2492)
反饋

很多小伙伴在學(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ù)頭條!


0 人點(diǎn)贊