欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中Lombok的實(shí)現(xiàn)示例

 更新時(shí)間:2025年10月21日 11:18:37   作者:我是天龍_紹  
本文主要介紹了java中Lombok的實(shí)現(xiàn)示例,Lombok通過注解自動(dòng)生成Java類的常用方法,如getter、setter、構(gòu)造函數(shù)等,顯著減少重復(fù)模板代碼,使代碼簡潔易維護(hù),感興趣的可以了解一下

Lombok 的核心思想是:通過注解來消除 Java 中的冗長代碼,讓代碼更加簡潔、清晰和易于維護(hù)。

它通過在編譯時(shí)自動(dòng)生成這些代碼的字節(jié)碼(比如 getter、setter、構(gòu)造函數(shù)等),讓你在源代碼中無需手動(dòng)編寫它們。

它解決了什么問題?

在標(biāo)準(zhǔn)的 Java 開發(fā)中,我們經(jīng)常需要為類的屬性編寫大量重復(fù)、模板化的代碼,例如:

  1. Getter 和 Setter 方法:為每個(gè)私有字段生成 getXxx() 和 setXxx() 方法。
  2. 構(gòu)造函數(shù):無參構(gòu)造、全參構(gòu)造等。
  3. equals()、hashCode() 和 toString() 方法。
  4. 日志記錄器:每次都要聲明 private static final Logger log = ...。

這些代碼本身沒有業(yè)務(wù)邏輯,但又必須存在,導(dǎo)致:

  • 源代碼冗長:一個(gè)簡單的 POJO 類可能就有上百行代碼。
  • 不易維護(hù):如果增加或修改一個(gè)字段,你需要手動(dòng)修改對(duì)應(yīng)的 getter、setter、equals、hashCodetoString 等方法,很容易出錯(cuò)。

Lombok 是如何工作的?

Lombok 是一個(gè) Java 編譯時(shí)注解處理器。它的工作流程如下:

  1. 你編寫代碼:在 Java 類上使用 Lombok 注解(如 @Data)。
  2. 編譯器調(diào)用 Lombok:當(dāng)你使用 javac(或 IDE 內(nèi)置的編譯功能)編譯代碼時(shí),編譯器會(huì)檢測到 Lombok 注解。
  3. Lombok 修改 AST:Lombok 會(huì)介入編譯過程,修改 Java 編譯器的抽象語法樹(AST) ,將注解對(duì)應(yīng)的代碼(如 getter 方法)的字節(jié)碼“注入”到正在編譯的類中。
  4. 生成最終的 .class 文件:最終生成的 .class 文件就包含了這些自動(dòng)生成的方法,就好像是你自己親手寫的一樣。

關(guān)鍵點(diǎn):Lombok 修改的是 .class 文件,而不是你的 .java 源文件。所以你的源代碼看起來非常干凈,但編譯后的類卻擁有所有完整的方法。

常用注解示例

讓我們通過一個(gè)例子來直觀感受 Lombok 的強(qiáng)大。

沒有 Lombok 的代碼:

public class User {
    private Long id;
    private String name;
    private Integer age;

    public User() {
    }

    public User(Long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        // ... 冗長且容易出錯(cuò)的 equals 實(shí)現(xiàn) ...
    }

    @Override
    public int hashCode() {
        // ... 冗長且容易出錯(cuò)的 hashCode 實(shí)現(xiàn) ...
    }

    @Override
    public String toString() {
        // ... toString 實(shí)現(xiàn) ...
    }
}

使用 Lombok 后的代碼:

import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@Data // 生成所有字段的getter、setter、equals、hashCode、toString方法
@NoArgsConstructor // 生成無參構(gòu)造函數(shù)
@AllArgsConstructor // 生成全參構(gòu)造函數(shù)
public class User {
    private Long id;
    private String name;
    private Integer age;
}

看到了嗎?只需要 4 行注解,就替代了上面近 60 行的代碼!  代碼變得極其簡潔,可讀性大大增強(qiáng)。

常用 Lombok 注解列表

注解作用
@Getter / @Setter為所有字段或特定字段生成 getter/setter。
@ToString生成 toString() 方法。
@EqualsAndHashCode生成 equals() 和 hashCode() 方法。
@NoArgsConstructor生成無參構(gòu)造函數(shù)。
@AllArgsConstructor生成全參構(gòu)造函數(shù)。
@RequiredArgsConstructor為 final 字段和標(biāo)記了 @NonNull 的字段生成構(gòu)造函數(shù)。
@Data最常用,是 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 的合集。
@Builder提供一種優(yōu)雅的建造者模式來創(chuàng)建對(duì)象。
@Slf4j自動(dòng)注入一個(gè)日志記錄器 log(也可以是 @Log4j, @Log 等)。
@val用于聲明局部變量,類型會(huì)自動(dòng)推斷(類似于 final var)。
@NonNull標(biāo)注在參數(shù)或字段上,自動(dòng)生成空值檢查。

如何使用 Lombok?

  1. 添加依賴:在項(xiàng)目的構(gòu)建工具中加入 Lombok 依賴。

    • Maven:
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version> <!-- 使用最新版本 -->
        <scope>provided</scope>
    </dependency>
    
    • Gradle:
      1. 安裝 IDE 插件:由于 Lombok 在編譯時(shí)修改字節(jié)碼,你的 IDE(如 IntelliJ IDEA, Eclipse)需要安裝對(duì)應(yīng)的 Lombok 插件,才能正確識(shí)別和提示這些自動(dòng)生成的方法。現(xiàn)在 IntelliJ IDEA 通常已內(nèi)置支持。
    compileOnly 'org.projectlombok:lombok:1.18.30'
    annotationProcessor 'org.projectlombok:lombok:1.18.30'
    

到此這篇關(guān)于java中Lombok的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)java Lombok內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spark學(xué)習(xí)筆記Spark Streaming的使用

    Spark學(xué)習(xí)筆記Spark Streaming的使用

    這篇文章主要介紹了Spark學(xué)習(xí)筆記Spark Streaming的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java HashMap算法原理詳細(xì)講解

    Java HashMap算法原理詳細(xì)講解

    在java開發(fā)中,HashMap是最常用、最常見的集合容器類之一,文中通過示例代碼介紹HashMap為啥要二次Hash,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn)

    mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn)

    本文主要介紹了mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mybatis?返回Map類型key默認(rèn)為大寫問題

    mybatis?返回Map類型key默認(rèn)為大寫問題

    這篇文章主要介紹了mybatis?返回Map類型key默認(rèn)為大寫問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 排查Java進(jìn)程內(nèi)存占比過高的方法

    排查Java進(jìn)程內(nèi)存占比過高的方法

    某天下午運(yùn)維反應(yīng)集成環(huán)境的一個(gè)Java服務(wù)內(nèi)存飆高,內(nèi)存耗的太高了,會(huì)疑似內(nèi)存泄漏,所以本文記一次排查Java進(jìn)程內(nèi)存占比過高的解決方法,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于java后端的詳解

    關(guān)于java后端的詳解

    在本篇文章里小編給各位分享的是關(guān)于java后端的知識(shí)點(diǎn)詳解,學(xué)習(xí)java的朋友們可以參考下。
    2019-08-08
  • Java listener簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java listener簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java listener簡介,可以用于統(tǒng)計(jì)用戶在線人數(shù)等,有興趣的可以了解一下
    2017-07-07
  • java 獲取當(dāng)前路徑下的所有xml文檔的方法

    java 獲取當(dāng)前路徑下的所有xml文檔的方法

    這篇文章主要介紹了java如何獲取當(dāng)前路徑下的所有xml文檔,需要的朋友可以參考下
    2014-05-05
  • JAVA實(shí)現(xiàn)第三方短信發(fā)送過程詳解

    JAVA實(shí)現(xiàn)第三方短信發(fā)送過程詳解

    這篇文章主要介紹了JAVA實(shí)現(xiàn)第三方短信發(fā)送過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java中泛型的接口、通配符使用詳解

    Java中泛型的接口、通配符使用詳解

    這篇文章主要介紹了Java中泛型的接口、通配符使用詳解,編譯時(shí)的類型安全監(jiān)測機(jī)制,也可以把這個(gè)數(shù)據(jù)類型理解成是一種可以傳遞的參數(shù),需要的朋友可以參考下
    2023-08-08

最新評(píng)論