最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

它解決了什么問(wèn)題?

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

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

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

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

Lombok 是如何工作的?

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

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

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

常用注解示例

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

沒(méi)有 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) {
        // ... 冗長(zhǎng)且容易出錯(cuò)的 equals 實(shí)現(xiàn) ...
    }

    @Override
    public int hashCode() {
        // ... 冗長(zhǎng)且容易出錯(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 // 生成無(wú)參構(gòu)造函數(shù)
@AllArgsConstructor // 生成全參構(gòu)造函數(shù)
public class User {
    private Long id;
    private String name;
    private Integer age;
}

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

常用 Lombok 注解列表

注解作用
@Getter / @Setter為所有字段或特定字段生成 getter/setter。
@ToString生成 toString() 方法。
@EqualsAndHashCode生成 equals() 和 hashCode() 方法。
@NoArgsConstructor生成無(wú)參構(gòu)造函數(shù)。
@AllArgsConstructor生成全參構(gòu)造函數(shù)。
@RequiredArgsConstructor為 final 字段和標(biāo)記了 @NonNull 的字段生成構(gòu)造函數(shù)。
@Data最常用,是 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 的合集。
@Builder提供一種優(yōu)雅的建造者模式來(lái)創(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)生成的方法?,F(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中this的n種使用方法

    java中this的n種使用方法

    this可能是幾乎所有有一點(diǎn)面向?qū)ο笏枷氲恼Z(yǔ)言都會(huì)引用到的變量,this有多少種用法。下面小編給大家?guī)?lái)了java中this的n種使用方法,感興趣的朋友一起看看吧
    2018-08-08
  • SpringTask快速入門(mén)最佳實(shí)踐記錄

    SpringTask快速入門(mén)最佳實(shí)踐記錄

    Spring Task是Spring框架自帶的任務(wù)調(diào)度工具,基于JDK 的ScheduledExecutorService實(shí)現(xiàn),提供了注解驅(qū)動(dòng)的定時(shí)任務(wù)配置方式,今天這篇文章,我們就來(lái)全面學(xué)習(xí)Spring Task的使用方法和進(jìn)階技巧,感興趣的朋友一起看看吧
    2025-08-08
  • java檢查服務(wù)器的連通兩種方法代碼分享

    java檢查服務(wù)器的連通兩種方法代碼分享

    這篇文章主要介紹了java檢查服務(wù)器的連通兩種方法代碼分享,涉及ping的介紹以及檢查服務(wù)器連通的兩種方法代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Spring如何通過(guò)@Lazy注解解決構(gòu)造方法循環(huán)依賴問(wèn)題

    Spring如何通過(guò)@Lazy注解解決構(gòu)造方法循環(huán)依賴問(wèn)題

    循環(huán)依賴其實(shí)就是循環(huán)引用,也就是兩個(gè)或則兩個(gè)以上的bean互相持有對(duì)方,最終形成閉環(huán),這篇文章主要給大家介紹了關(guān)于Spring如何通過(guò)@Lazy注解解決構(gòu)造方法循環(huán)依賴問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 基于Java實(shí)現(xiàn)修改圖片分辨率示例代碼

    基于Java實(shí)現(xiàn)修改圖片分辨率示例代碼

    這篇文章主要介紹了一個(gè)可以修改圖片分辨率的java工具類,文中的示例代碼講解詳細(xì),對(duì)學(xué)習(xí)JAVA有一定的幫助,感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • 基于maven的ssm框架整合的示例代碼

    基于maven的ssm框架整合的示例代碼

    本篇文章主要介紹了基于maven的ssm框架整合的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Session和JWT的區(qū)別是什么以及與Cookie相比詳解

    Session和JWT的區(qū)別是什么以及與Cookie相比詳解

    Web應(yīng)用需客戶端存儲(chǔ)用戶信息,Cookie是早期方案,有特點(diǎn)及驗(yàn)證方式,下面這篇文章主要介紹了Session和JWT的區(qū)別是什么以及與Cookie相比的相關(guān)資料,文中通過(guò)代碼就介紹的非常詳細(xì),需要的朋友可以參考下
    2026-04-04
  • Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法

    Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法

    這篇文章主要介紹了Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了Java操作ArrayList自定義排序的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • Spring bean注冊(cè)到容器的總結(jié)

    Spring bean注冊(cè)到容器的總結(jié)

    這篇文章主要介紹了Spring bean注冊(cè)到容器的總結(jié),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 詳解Java中跳躍表的原理和實(shí)現(xiàn)

    詳解Java中跳躍表的原理和實(shí)現(xiàn)

    跳躍表(Skip list)是有序鏈表的擴(kuò)展,簡(jiǎn)稱跳表,它在原有的有序鏈表上增加了多級(jí)索引,通過(guò)索引來(lái)實(shí)現(xiàn)快速查找,實(shí)質(zhì)上是一種可以進(jìn)行二分查找的有序鏈表。本文主要為大家介紹了跳躍表的原理和實(shí)現(xiàn),需要的可以參考一下
    2022-12-12

最新評(píng)論

商洛市| 陇南市| 安达市| 商城县| 丹棱县| 巫山县| 保康县| 平阴县| 同心县| 海伦市| 平果县| 同德县| 罗定市| 班玛县| 肃北| 宜君县| 中阳县| 嘉义县| 应城市| 合江县| 阿拉尔市| 宁阳县| 遵义县| 石台县| 东乡县| 垦利县| 隆尧县| 诏安县| 尉氏县| 曲阜市| 沙洋县| 噶尔县| 图们市| 龙州县| 淮滨县| 砀山县| 剑河县| 博客| 阿勒泰市| 象州县| 泗阳县|