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

Lombok 注解教程

一、Lombok 简介

Lombok 是一个 Java 库,通过注解自动生成常见代码(getter/setter、构造方法、equals/hashCode 等),减少样板代码。

安装

  • IDE 需安装 Lombok 插件

  • Maven 依赖:

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

二、常用注解详解

1. @Getter / @Setter

生成字段的 getter/setter 方法。

@Getter @Setter private String name; // 或加在类上,为所有字段生成 @Getter @Setter public class User { private String name; private int age; private boolean active; // boolean 的 getter 是 isActive() }

2. @ToString

生成 toString 方法。

@ToString @ToString.Exclude // 排除字段 @ToString(onlyExplicitlyIncluded = true) // 只包含 @ToString.Include public class User { private String name; @ToString.Exclude private String password; }

3. @EqualsAndHashCode

生成 equals 和 hashCode 方法。

@EqualsAndHashCode @EqualsAndHashCode.Exclude @EqualsAndHashCode(of = {"id", "name"}) // 指定字段 public class User { private Long id; private String name; @EqualsAndHashCode.Exclude private String password; }

4. @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor

@NoArgsConstructor // 无参构造 @AllArgsConstructor // 全参构造 @RequiredArgsConstructor // 必需参数构造(final 或 @NonNull 字段) public class User { private final Long id; // RequiredArgsConstructor 会包含 @NonNull private String name; // RequiredArgsConstructor 会包含 private int age; }

5. @Data

组合注解:@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor

@Data public class User { private Long id; private String name; private int age; }

6. @Builder

生成建造者模式代码。

@Builder public class User { private Long id; private String name; private int age; } // 使用 User user = User.builder() .id(1L) .name("张三") .age(25) .build();

@Builder 的高级用法

@Builder(toBuilder = true) // 允许从实例构建新对象 public class User { // ... } // 复制并修改 User newUser = user.toBuilder().age(26).build();

7. @Slf4j

自动生成 SLF4J 日志对象。

@Slf4j public class UserService { public void doSomething() { log.info("执行操作"); log.error("发生错误"); } }

其他日志注解:@Log(java.util.logging)、@Log4j2 等。

8. @NonNull

自动生成空值检查。

public class User { public void setName(@NonNull String name) { // lombok 会自动生成 if (name == null) throw new NullPointerException this.name = name; } }

9. @Cleanup

自动关闭资源。

public void readFile() throws IOException { @Cleanup InputStream in = new FileInputStream("test.txt"); // 自动生成 try-finally 调用 in.close() }

10. @SneakyThrows

偷偷抛出受检异常,无需显式声明。

@SneakyThrows public void readFile() { // 无需 throws IOException Files.readAllBytes(Paths.get("test.txt")); }

三、注解搭配使用示例

@Data @Builder(toBuilder = true) @AllArgsConstructor @NoArgsConstructor public class User { private Long id; private String name; private int age; @ToString.Exclude private String password; } // 使用 User user = User.builder() .id(1L) .name("李四") .age(30) .password("123456") .build(); User copy = user.toBuilder().age(31).build();

四、配置(lombok.config)

创建lombok.config文件在项目根目录:

# 要求所有 @Data 类都生成全参构造 lombok.data.allArgsConstructor = true # 禁止使用某些注解 lombok.nonNull.exceptionType = NullPointerException

五、注意事项

  1. @Builder @NoArgsConstructor @AllArgsConstructor public class User {} // 同时添加两个构造器注解

    与 JPA/Hibernate 搭配:@Data 生成的 equals/hashCode 可能导致懒加载问题,建议手动控制

  2. 构造器冲突:@Builder 和 @AllArgsConstructor 同时使用时,注意构造器顺序

  3. IDE 支持:必须安装插件,否则会显示编译错误

  4. 版本兼容:注意与 Java 版本的兼容性

六、常见问题

Q1:@Builder 无法使用无参构造?

@Builder @NoArgsConstructor @AllArgsConstructor public class User {} // 同时添加两个构造器注解

Q2:@Slf4j 日志对象叫什么?
默认是log,可通过@Slf4j(topic = "loggerName")修改。

Q3:如何让 @Data 不生成 setter?
使用@Getter @Setter @ToString @EqualsAndHashCode分别控制。

总结

注解用途
@Getter/@Setter生成 getter/setter
@ToString生成 toString
@EqualsAndHashCode生成 equals/hashCode
@NoArgsConstructor无参构造
@AllArgsConstructor全参构造
@Data综合注解
@Builder建造者模式
@Slf4j日志对象
@NonNull非空校验
@Cleanup自动资源管理
@SneakyThrows简化异常处理

建议日常开发中使用 @Data + @Builder + @Slf4j 组合,可大幅减少样板代码。

http://www.jsqmd.com/news/705439/

相关文章:

  • 自然语言驱动GUI测试:AUITestAgent架构解析与工程实践
  • 批量卸载工具Bulk Crap Uninstaller:3分钟彻底清理Windows垃圾软件
  • 移动端UI自动化测试新框架Maestro:声明式语法与实战指南
  • 深度学习噪声训练:提升模型泛化能力的实战指南
  • 3分钟搞定QMC加密音频:你的专属音乐解锁秘籍
  • Python机器学习代码健壮性提升的10个核心技巧
  • 终极Windows安装指南:MediaCreationTool.bat一键突破所有版本限制
  • 【MCP 2026日志异常检测终极指南】:覆盖97.3%未知攻击模式的实时检测框架首次公开
  • neutron详解
  • B站视频下载终极指南:轻松获取4K大会员视频的完整教程
  • UFLDv2车道线检测与车道偏离预警(LDWS)实战
  • 终极教程:3步在Windows上完美使用Switch Joy-Con手柄
  • 泵人心中很清楚的HPH构造——三大系统和常见故障全面解析
  • BetterGI原神自动化工具:终极解放双手的完整指南
  • CVAT 3D标注实战:手把手教你用点云数据标注自动驾驶场景(附避坑指南)
  • 【Flutter for OpenHarmony 第三方库】Flutter for OpenHarmony 引导页设计与新用户体验优化实现指南
  • SocialEcho vs Buffer vs Hootsuite:2026 年三大出海社媒工具深度横评 - SocialEcho社媒管理
  • JavaScript中对象toString与valueOf的重写与调用
  • 终极海口作战计划
  • 【MCP 2026边缘部署黄金法则】:20年架构师亲授7步极简优化流程,错过再等三年
  • ARM版的windows(macbook虚拟机使用)在国内外技术平台有哪些版本可以选择?
  • STM32F103C8T6最小系统板:物联网图像采集终端硬件基础
  • G-Helper:华硕笔记本的轻量级控制中心,告别Armoury Crate臃肿体验
  • 2026服装与美妆行业的微信小程序怎么做?哪家开发公司更好? - 企业数字化改造和转型
  • Harness Engineering 介绍与最佳实践
  • 【Docker AI Toolkit 2026企业级落地白皮书】:首发解析GPU资源调度优化、模型热更新、联邦学习容器化等7大生产级能力
  • 高压均质机的构造与工作原理解析
  • 深度掌握AMD Ryzen内存时序:ZenTimings专业监控工具完全指南
  • EvaDB:用SQL直接调用AI模型,降低AI应用开发门槛
  • VS Code远程容器开发效率跃迁实战(Dev Containers 2024黄金配置手册)