學習使用Lombok生成代碼


一、介紹

  Lombok官網:https://projectlombok.org/

  Lombok的功能簡單一點說,就是可以幫我們生成一些代碼,這些代碼並不是在源碼(source code)體現出來的,而是在字節碼文件中。

  比如我們創建一個簡單的pojo,需要生成有參構造函數、無參構造函數、getter、setter、toString、hashCode、equals這些個方法,雖然通過IDE也是可以生成代碼的,但是,利用IDE生成的代碼有個問題:代碼量大、如果修改屬性名后,這些方法基本都得重新生成,不咋方便。

  Lombox的功能:可以為我們生成上面說的那些方法,只需要我們在類名上使用相關注解即可。

 

二、導入jar包

  這里使用Maven來導入依賴:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

  注意,maven引入依賴是,scope是provided,也就是說,lombok包在運行時是不需要的,主要是在編譯的時候使用。

 

三、創建簡單pojo

  這里舉個簡單的示例,就創建一個Person類:

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;

// 注意下面使用的幾個注解,都是Lombok提供的
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class Person {

    // 創建三個屬性
    private Integer id;
    private String name;
    private String addr;

    // 沒有使用IDE進行代碼生成,編譯源碼時,Lombok會自動在字節碼中生成方法(前面注解指定的那些方法)
}

  

  生成的代碼如下:

public class Person {
    private Integer id;
    private String name;
    private String addr;

    public Person() {
    }

    public Person(final Integer id, final String name, final String addr) {
        this.id = id;
        this.name = name;
        this.addr = addr;
    }

    public String toString() {
        return "Person(id=" + this.id + ", name=" + this.name + ", addr=" + this.addr + ")";
    }

    public boolean equals(final Object o) {
        // 會調用下面canEqual方法
    }

    protected boolean canEqual(final Object other) {
        return other instanceof Person;
    }

    public int hashCode() {
        // 計算出hashCode
    }
}

  

四、Lombok常用的注解

  下面是Lombok常用的注解:

@NoArgsConstructor      // 生成無參構造函數
@AllArgsConstructor     // 生成包含所有屬性的有參構造函數
@ToString               // 生成toString方法
@EqualsAndHashCode      // 生成equals和hashCode方法
@Getter                 // 為所有字段生成getter
@Setter                 // 為所有字段生成setter
@Data                   // 等價於 @NoArgsConstructor + @Getter + @Setter + @EqualsAndHashCode + @ToString
@Slf4j                  // 自動生成log對象
@Builder                // 生成Builder代碼(非Builder設計模式)

  

五、進行測試

  創建測試類:

package cn.ganlixin.pojo;

import org.junit.Test;

public class TestPerson {

    @Test
    public void testCreatePerson() {
        // 雖然IDE提示下面的構造函數有錯誤,但是執行的時候,並不會報錯,而是會正常運行
        Person person = new Person(1, "ganlixin", "beijing");
        System.out.println(person);
        // 輸出 Person(id=1, name=ganlixin, addr=beijing)
        // 說明有參構造函數和toString方法已經生成了
    }
}

 

六、解決IDEA提示Lombok生成方法未定義的問題

6.1、問題描述

  因為我們在使用Lombok的時候,Lombok為我們生成的代碼是在字節碼中(*.class),而不是在source code中,所以存在IDE提示Lombok生成的方法未定義的錯誤,導致項目不能正常編譯,但是我們都知道,這是沒問題的,只是IDE的問題。

  比如,使用@Setter來注解一個類的時候,我們可以免於手動寫或者利用IDE生成每個屬性的Setter方法,因為Lombok會為在編項目的時候,掃描到@Setter方法,就會在字節碼中為屬性生成setter方法。但是,我們在代碼中調用一個該類實例對象的setter方法的時候,IDE就會提示沒有定義該方法,其實IDE也沒有錯,只是他不是根據字節碼中的方法來判斷的。  

 

6.2、IDEA插件庫安裝

   步驟:打開IDEA -->  打開Preferences --> 選擇Plugins,如下圖

  

  安裝Lombok插件后,重啟IDEA即可。

 

6.3、下載插件安裝(針對IDEA)

  如果在插件庫中沒有搜到Lombok,可以去通過本地安裝的方式,按照下面的步驟進行操作:

  地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases

  根據版本下載一個zip包即可。

 

  啟動IDEA,打開preferences,建議在IDEA的啟動界面打開preferences進行設置,因為這樣設置后是全局的,每個項目都可以使用。

  

 

  選擇Plugins

  

   

  打開右邊的設置,選擇Install Plugin from Disk

  然后選擇第一步下載的zip包,點擊確認即可。

  

  進入到Plugins,重啟IDEA即可

  點擊Installed,可以看到上一步安裝的Lombok插件

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM