news 2026/4/26 22:15:56

Lombok 注解教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 组合,可大幅减少样板代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 21:55:50

如何快速诊断GPU内存故障:MemtestCL完整指南

如何快速诊断GPU内存故障&#xff1a;MemtestCL完整指南 【免费下载链接】memtestCL OpenCL memory tester for GPUs 项目地址: https://gitcode.com/gh_mirrors/me/memtestCL 还在为显卡频繁崩溃而烦恼吗&#xff1f;每次运行大型游戏或专业软件时&#xff0c;系统突然…

作者头像 李华
网站建设 2026/4/26 21:54:45

cursor的MCP怎么配置使用?

1.需要用nxp 安装drawio{"mcpServers": {"drawio": {"command": "npx","args": ["-y", "next-ai-drawio/mcp-serverlatest"]}} }怎么用 Cursor 里的 drawio MCP 画图&#xff08;含提示词示例&#xff…

作者头像 李华
网站建设 2026/4/26 21:45:13

鸿蒙红利期全景解析:蓝海、缺口与开发者的黄金时代

鸿蒙红利期全景解析&#xff1a;蓝海、缺口与开发者的黄金时代市场呼唤着填补空缺的先行者&#xff0c;近200亿的年度开发者扶持资金已准备就绪&#xff0c;每个接入鸿蒙的开发者都可能成为生态链条上不可或缺的一环。走进2026年&#xff0c;鸿蒙系统在国内的市场份额已经突破1…

作者头像 李华