App下載

如何簡化你的java代碼?lombok使用介紹!

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

很多小伙伴在學(xué)習(xí) javabean 的時候,會發(fā)現(xiàn)在開發(fā) Javabean 類的過程中,很大部分是在做變量的?getter/setter?。這樣重復(fù)的工作是繁瑣且低效的,而且要維護的時候往往難以閱讀,當(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?生成的代碼遠不止這些,他還生成了?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ù)頭條!


0 人點贊