1. 程式人生 > 實用技巧 >Lombok 安裝、入門 - 消除冗長的 java 程式碼

Lombok 安裝、入門 - 消除冗長的 java 程式碼

一、介紹

  lombok是一個幫助簡化程式碼的工具,通過註解的形式例如@Setter @Getter,可以替代程式碼中的getter和setter方法,雖然eclipse自帶的setter、getter程式碼生成也不需要我們手動的去敲寫,但是使用@Setter @Getter這樣的註解,能夠使我們的程式碼看上去更加的簡潔、優雅。

  官網:https://projectlombok.org/

  

二、安裝

  使用 lombok 是需要安裝的,如果不安裝,IDE 則無法解析 lombok 註解

1、下載lombok外掛

  官網:https://www.projectlombok.org/download

  百度雲:

    連結:https://pan.baidu.com/s/1Z4sKHNUPGFhLMJs6rQ1oUg
    提取碼:nmqc

2、將下載的lombok.jar放在eclipse.ini同級目錄下

3、執行jar包(直接點選或者cmd命令:java -jar lombok.jar)

4、選擇編譯器地址打鉤,如果沒有識別到電腦上的IDE可以點選下方的Specify location新增ide可執行檔案路徑

5、檢查eclipse.ini檔案中-javaagent:D:\xxx\lombok.jar地址是否有誤(如果路徑含中文會啟動失敗)

6、重啟eclipse,就發現能夠正常使用啦

三、使用

  注意:使用之前需要先按照以上步驟安裝,在eclipse.ini配置

1、引入依賴

  在pom.xml中新增如下依賴:

<!-- 簡化程式碼工具lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

2、常見註解解析

  Lombok的使用方法只需在對用類或方法新增對應註解即可

  線上官方文件:https://projectlombok.org/features/all

(1)@Getter@Setter

  該註解使用在類或者屬性上,該註解可以使用在類上也可以使用在屬性上。生成的getter遵循布林屬性的約定。例如:boolean型別的Foo,getter方法為isFoo而不是getFoo在使用該註解時,會預設生成一個無參構造。和對應的getter, setter。

  關於boolean型別的資料,仔細看以下例子:

package com.lemon.zuul.config;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class TestDemo {
  private String userName;
  private int userAge;
  private boolean userSex ;
  private boolean isLeader;
}

  圖中布林型別為基本資料型別

  setter方法

  上圖第一行為成員變數isLeader的setter方法,其中isLeader中的is不見了,下方第四行為成員變數userSex的setter方法,一切正常。

  getter方法

  長這樣,get方法的生成規範是對於布林基本資料型別是is+變數名,如果變數名包含了一個is那麼也是隻有一個is不會是isIsxxx。

  eclipse自動生成規則同上

  修改布林變數為對應包裝類

package com.lemon.zuul.config;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class TestDemo {
  private String userName;
  private int userAge;
  private Boolean userSex ;
  private Boolean isLeader;
}

  setter方法

  符合我們想要的

  getter方法

  也符合我們想要的

  總結:布林型別為對應包裝類時,setter、getter生成符合我們預期結果,而為基本資料型別時,get類的方法是以is開頭。

(2)@Data

  該註解使用在類上,該註解是最常用的註解,它結合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本質上使用@Data註解,類預設@ToString@EqualsAndHashCode以及每個欄位都有@Setter@getter。該註解也會生成一個公共建構函式,可以將任何@NonNullfinal欄位作為引數。

  雖然@Data註解非常有用,但是它沒有與其他註解相同的控制粒度。@Data提供了一個可以生成靜態工廠的單一引數,將staticConstructor引數設定為所需要的名稱,Lombok自動生成的建構函式設定為私有,並提供公開的給定名稱的靜態工廠方法。

  註解示例:

@Data(staticConstructor="of")
public class Company {
    private final Person founder;
    private String name;
    private List<Person> employees;
}

  等同於Java原始碼:

public class Company {
    private final Person founder;
    private String name;
    private List<Person> employees;

    private Company(final Person founder) {
        this.founder = founder;
    }

    public static Company of(final Person founder) {
        return new Company(founder);
    }

    public Person getFounder() {
        return founder;
    }

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }

    public List<Person> getEmployees() {
        return employees;
    }

    public void setEmployees(final List<Person> employees) {
        this.employees = employees;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object o) {
        if (o == this) return true;
        if (o == null) return false;
        if (o.getClass() != this.getClass()) return false;
        final Company other = (Company)o;
        if (this.founder == null ? other.founder != null : !this.founder.equals(other.founder)) return false;
        if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;
        if (this.employees == null ? other.employees != null : !this.employees.equals(other.employees)) return false;
        return true;
    }

    @java.lang.Override
    public int hashCode() {
        final int PRIME = 31;
        int result = 1;
        result = result * PRIME + (this.founder == null ? 0 : this.founder.hashCode());
        result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());
        result = result * PRIME + (this.employees == null ? 0 : this.employees.hashCode());
        return result;
    }

    @java.lang.Override
    public java.lang.String toString() {
        return "Company(founder=" + founder + ", name=" + name + ", employees=" + employees + ")";
    }

}

(3)@NonNull

  該註解使用在屬性上,該註解用於屬的非空檢查,當放在setter方法的欄位上,將生成一個空檢查,如果為空,則丟擲NullPointerException。該註解會預設是生成一個無參構造。

  註解示例和Java原始碼:

(4)@EqualsAndHashCode

  該註解使用在類上,該註解在類級別註釋會同時生成equalshashCode

  註解示例和Java原始碼:

(5)@toString

  該註解使用在類上,該註解預設生成欄位以名稱-值的形式輸出。

  註解示例和Java原始碼:

(6)@Value

  這個註解用在 類 上,會生成含所有引數的構造方法,get 方法,此外還提供了equals、hashCode、toString 方法。沒有setter

(7)@Log4j

  註解在類上;為類提供一個 屬性名為log 的 log4j 日誌物件

(8)NoArgsConstructor

  註解在類上;為類提供一個無參的構造方法

(9)AllArgsConstructor

  註解在類上;為類提供一個全參的構造方法