当前位置: 首页 > news >正文

Lombok

Lombok

在这里插入图片描述

🎯 什么是Lombok?

Lombok是一个Java工具库,用于通过注解在编译期自动生成样板代码(Boilerplate Code)。

工作原理:它以注解处理器的形式工作。在javac编译代码时,Lombok会根据其注解动态修改代码的抽象语法树(AST),将生成的getter, setter, toString()等方法的字节码直接注入到最终的.class文件中。源代码保持简洁,而编译产物功能完备。

🔧 安装与配置

  1. 添加项目依赖

    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version> <scope>provided</scope>
    </dependency>
    
  2. 安装IDE插件
    为IntelliJ IDEA, Eclipse, VS Code等IDE安装Lombok插件。此步骤为必需,否则IDE将无法识别Lombok生成的代码,导致编译错误。

🔥核心注解详解

基础注解
  • @Getter / @Setter: 为类中所有非静态字段生成getset方法。
  • @ToString: 生成一个标准的toString()方法,输出类名和所有字段。
  • @EqualsAndHashCode: 生成equals()hashCode()方法。默认使用所有非静态、非瞬态字段。
  • @NoArgsConstructor: 生成一个无参构造函数。
  • @AllArgsConstructor: 生成一个包含所有字段作为参数的构造函数。
  • @RequiredArgsConstructor: 生成一个构造函数,其参数为所有final或标记为@NonNull的字段。
组合注解
  • @Data: 核心组合注解,相当于@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor
  • @Value: 用于创建不可变类。将所有字段设为private final,并捆绑了@Getter, @ToString, @EqualsAndHashCode等功能(不含@Setter)。
  • @Builder: 应用建造者设计模式,为类提供一个链式调用的实例化方法。

📊 注解汇总表

注解功能/作用备注
@Getter为字段生成 get 方法
@Setter为字段生成 set 方法final 字段不会生成
@ToString生成 toString() 方法可通过 exclude 参数排除字段
@EqualsAndHashCode生成 equals()hashCode() 方法可通过 of 参数指定字段
@NoArgsConstructor生成无参构造函数
@AllArgsConstructor生成包含所有字段的全参构造函数
@RequiredArgsConstructorfinal@NonNull字段生成构造函数
@Data组合注解@Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor最常用的组合注解
@Value创建不可变类,捆绑了@Getter等功能所有字段自动为 private final
@Builder应用建造者模式,提供链式API

🔥 核心注解速览

Lombok的精髓在于其强大而简洁的注解。

基础注解
  • @Getter / @Setter: 自动生成所有非静态字段的getset方法。
    public class User {@Getter @Setter private String username;@Getter private final Long id; // final字段只会生成getter
    }
    
  • @ToString: 生成一个包含类名和所有字段值的toString()方法,方便调试。
    @ToString(exclude = "password") // 可以排除敏感字段
    public class User {private String username;private String password;
    }
    
  • @EqualsAndHashCode: 生成equals()hashCode()方法。这对于将对象存入Set或作为Map的键至关重要。
    @EqualsAndHashCode(of = {"id", "email"}) //可以只基于特定字段生成
    public class User {private Long id;private String username;private String email;
    }
    
  • @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor:
    • @NoArgsConstructor: 生成无参构造函数。
    • @AllArgsConstructor: 生成包含所有字段的全参构造函数。
    • @RequiredArgsConstructor: 为所有final或标记为@NonNull的字段生成构造函数。

组合注解

组合注解是Lombok的精髓,能用一个注解解决大部分问题。

  • @Data: 万能注解。它相当于@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor的超级组合。

    @Data // 一个注解搞定一切
    public class User {private Long id;private String username;private String password;
    }
    
  • @Value: 用于创建不可变类 (Immutable Class)。它相当于@Data的只读版,所有字段都会被自动设为private final,并且只生成getter,不生成setter

    @Value // 创建一个不可变的数据对象
    public class Point {int x;int y;
    }
    
  • @Builder: 建造者模式的实现。为你的类提供一个优雅的、链式调用的实例化方法,特别适合字段多的复杂对象。

    @Builder
    @Data
    public class Task {private Long id;private String title;private String description;private boolean completed;
    }// 使用
    Task task = Task.builder().id(1L).title("完成报告").completed(false).build();
    

👍 优点与缺点

优点 (Pros)缺点 (Cons)
显著减少样板代码量代码生成过程对开发者不透明
提高开发效率,代码更整洁必须依赖IDE插件才能正常开发
自动生成,减少人为错误可能与其他注解处理器或字节码工具冲突
易于维护,修改字段时自动同步降低了对Java基础语法的熟悉度

💡 最佳实践

  1. 通用POJO/DTO:直接使用@Data
  2. 不可变类:使用@Value
  3. JPA实体类 (@Entity)避免使用@Data@EqualsAndHashCode,因为可能与懒加载和集合操作冲突。推荐手动添加@Getter, @Setter, @ToString
  4. 多参数对象构建:使用@Builder,提高代码可读性。

🎯 总结

Lombok是一个通过注解在编译期生成代码的工具,其核心价值在于消除Java的样板代码。它能显著提高开发效率,使代码更加简洁。正确使用Lombok的前提是添加依赖安装IDE插件。在不同场景下选择合适的注解(特别是@Data, @Value, @Builder和对实体类的特殊处理)是高效使用Lombok的关键。


文章转载自:

http://uDq2r8ur.rqfnL.cn
http://F25LFXgI.rqfnL.cn
http://Kg8KEgUv.rqfnL.cn
http://RYlOF8jX.rqfnL.cn
http://ibJMJJ7i.rqfnL.cn
http://Tdkzrx7L.rqfnL.cn
http://XnONOfYI.rqfnL.cn
http://FaXcSoLu.rqfnL.cn
http://VR1OfPSx.rqfnL.cn
http://F0bJPVNs.rqfnL.cn
http://Ewk4dRRz.rqfnL.cn
http://7lcpAzo9.rqfnL.cn
http://zYkUbFJx.rqfnL.cn
http://0RToX79O.rqfnL.cn
http://CIB17TB1.rqfnL.cn
http://p2KPr321.rqfnL.cn
http://S3n0Vl6g.rqfnL.cn
http://jKomFDZI.rqfnL.cn
http://WxF5VLUE.rqfnL.cn
http://6CRELqNO.rqfnL.cn
http://zkWDfeyX.rqfnL.cn
http://ImpE3ibp.rqfnL.cn
http://O4ZGx7Tc.rqfnL.cn
http://CeEhpULR.rqfnL.cn
http://pFMKuVSK.rqfnL.cn
http://qHyGDX54.rqfnL.cn
http://Ge54k9jq.rqfnL.cn
http://Ar85JqpS.rqfnL.cn
http://xj204vLr.rqfnL.cn
http://LpGvqeHa.rqfnL.cn
http://www.dtcms.com/a/385256.html

相关文章:

  • React Scheduler(调度器)
  • 多任务数据集的具体使用场景
  • KITTI数据集
  • 什么云服务器更好用推荐一下!?
  • 根据Linux内核原理 LRU链表如何知道page的活动频繁程度?
  • 2025全球LoRaWAN模组技术对比与应用方案解析
  • 社区主题征文——「异构融合与存算一体:架构探索与创新实践」算力技术征文
  • Jenkins参数化构建
  • SIPJS对接FreeSWITCH强制媒体流走coturn relay地址
  • docker registry 私服搭建教程
  • 清除gradle缓存的某个依赖
  • MCP引导Agent示例
  • 【HTTP 响应状态码】从零到实战
  • 航线系统对频模块技术要点
  • 二十、DevOps落地:Jenkins基础入门(一)
  • 计网1.1
  • DDD领域驱动设计
  • 传智播客--MySQL
  • 不同 HLA II 类等位基因(HLA-DRB1*15:02)与 cGVHD 的关联差异
  • 【AI 辅助工作工具集合】持续更新
  • 核心信息防爬虫盗取技术方案
  • Linux网络:序列化和反序列化
  • Java 代理模式-JDK动态代理
  • RabbitMQ 消息持久化与可靠性
  • 基于YOLO8的打架斗殴行为检测系统【源码+数据集+文章】
  • 电磁超声螺栓轴力检测技术:破解法兰泄露与设备安全痛点的关键方案
  • GPT-5深度解析:它真的是AGI的拂晓晨光吗?
  • (播放器开发)音频输出
  • 视频转音频在线工具大比拼,哪家体验更胜一筹?
  • 如何选择合适的工业绝缘监测仪