泪伤荡的编程指南 泪伤荡的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM篇
  • 新特性
  • 进阶篇
  • 网络
  • 操作系统
  • 数据结构与算法
  • 硬件
  • 基础篇
  • MySql
  • Oracle
  • PostgreSQL
  • 达梦
  • Redis
  • Mongodb
  • Hive
  • 数据库比较
  • Spring
  • SpringMvc
  • SpringBoot
  • Hibernate
  • iBatis
  • Mybatis
  • Mybatis-plus
  • Mybatis-plus-join
  • 各个框架对比
  • UML画图
  • 设计须知
  • 开发流程
  • 开发理论
  • 架构体系
  • 设计模式
  • 开源知识
  • 分布式解决方案
  • SpringCloud
  • API网关
  • 注册中心
  • 配置中心
  • 服务调用
  • 分布式事务
  • 消息队列
  • 调度作业
  • 链路追踪
  • 服务保障
  • 搜索引擎Elk
  • 安全框架
  • 监控体系
  • 部署容器
  • Netty
  • Tomcat
  • Nginx
  • 图片云存储
  • 云存储
  • 虚拟机Linux
  • 项目部署
  • 容器部署
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • Bug记录仓库
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 视频网站
  • 音乐网站
  • 商城网站
  • 论坛网站
  • scrm项目
  • Yudao-cloud
  • RuoYi-Vu-cloud
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • Java术语
  • 命名英语
  • 业务英语
  • 表字段英语
  • 包名英语
Github (opens new window)
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM篇
  • 新特性
  • 进阶篇
  • 网络
  • 操作系统
  • 数据结构与算法
  • 硬件
  • 基础篇
  • MySql
  • Oracle
  • PostgreSQL
  • 达梦
  • Redis
  • Mongodb
  • Hive
  • 数据库比较
  • Spring
  • SpringMvc
  • SpringBoot
  • Hibernate
  • iBatis
  • Mybatis
  • Mybatis-plus
  • Mybatis-plus-join
  • 各个框架对比
  • UML画图
  • 设计须知
  • 开发流程
  • 开发理论
  • 架构体系
  • 设计模式
  • 开源知识
  • 分布式解决方案
  • SpringCloud
  • API网关
  • 注册中心
  • 配置中心
  • 服务调用
  • 分布式事务
  • 消息队列
  • 调度作业
  • 链路追踪
  • 服务保障
  • 搜索引擎Elk
  • 安全框架
  • 监控体系
  • 部署容器
  • Netty
  • Tomcat
  • Nginx
  • 图片云存储
  • 云存储
  • 虚拟机Linux
  • 项目部署
  • 容器部署
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • Bug记录仓库
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 视频网站
  • 音乐网站
  • 商城网站
  • 论坛网站
  • scrm项目
  • Yudao-cloud
  • RuoYi-Vu-cloud
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • Java术语
  • 命名英语
  • 业务英语
  • 表字段英语
  • 包名英语
Github (opens new window)
  • 开发工具篇

    • idea设置

      • 配置篇
      • 快捷键篇
      • debug篇
      • 插件篇
    • 玩转Git

      • 基础知识梳理
      • Git配置相关操作
      • git修改已提交人的用户名和邮箱
      • git提交规范
      • 常见问题
    • Maven相关

      • Maven简介
      • Maven常用命令
      • 依赖管理
      • Maven生命周期与插件
      • Maven项目管理工具
    • Apifox使用小结
    • nvm使用小结
    • JMeter使用小记
  • 工具库篇

    • lombok工具库

      • lombok注解使用小结
      • Builder用法解析
        • 1. 引入 Lombok 依赖
        • 2. 在类或方法上使用 @Builder 注解
          • 2.1 类级别 @Builder
          • 2.2 方法级别 @Builder
        • 3. 属性控制
          • 3.1 @Builder.Default
          • 3.2 隐藏敏感字段
        • 4. 构建器方法命名
        • 5. 继承与 @SuperBuilder
      • 异常相关注解
    • EasyExcel小记

      • 工具类
      • 文件导入
      • 文件导出
    • 定时任务相关

      • 基础入门
      • SpringTask学习
      • Quartz学习
    • Hutool工具库

      • 图片压缩
    • 极光推送学习
    • OkHttp学习
    • BigDecimal类详解
    • PdfBox学习
  • 开发技巧篇

    • 常见数据校验注解
    • 字符串拼接的5种方式
    • 遍历集合的N种方式
    • 集合使用注意事项总结
    • MP使用小记
    • Stream流技巧总结
    • 字符串处理最佳实践
    • SQL语句优化
    • 时间字段处理小记
    • Curl用法解析
    • 列表分页的两种实现方案
    • HashMap根据value获取key
    • Map的7种遍历方式
    • 唯一索引和逻辑删除冲突解决方法
    • 正则表达式
    • 二维码扫码登录学习
    • 脱敏最佳实践
    • 日志记录相关
  • 工具类系列

    • 手写一个文件阅读器
    • 手写一个运行耗时计算器
    • 自定义实现Java Bean属性中列表元素格式校验注解及其实现
    • 父子工程项目搭建
    • 自制代码生成器
  • 随笔

    • HttpServletRequest知识小结
    • Spring MVC 项目构建流程
    • 虚拟机固定ip地址
    • 项目部署
    • 深入理解数组
    • IIS使用小记
    • From的两种类型解析
    • 开发疑惑
    • 开发小记
    • bug解决
  • 开发日常
  • 工具库篇
  • lombok工具库
泪伤荡
2024-04-23
目录

Builder用法解析

# Builder 用法解析

@Builder 注解是 Lombok 库提供的一个强大特性,它允许开发者以简洁且可读性强的方式创建对象,尤其是对于具有大量可选参数或者复杂构建逻辑的类。以下是 @Builder 注解的使用方法和相关细节:

# 1. 引入 Lombok 依赖

在使用 @Builder 注解之前,确保已将 Lombok 库添加到项目的构建工具(如 Maven 或 Gradle)中。例如,在 Maven 的 pom.xml 文件中添加 Lombok 依赖:

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>latest-version</version> <!-- 替换为当前最新版本 -->
        <scope>provided</scope>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8

# 2. 在类或方法上使用 @Builder 注解

# 2.1 类级别 @Builder

将 @Builder 注解应用于类定义上,Lombok 会自动生成一个对应的内部静态类 Builder,用于以链式调用的方式构建对象。例如:

@Builder
@Getter
public class Person {
    private String firstName;
    private String lastName;
    private Integer age;
    private String address;
    // 其他字段...
}
1
2
3
4
5
6
7
8
9

在这个例子中,Lombok 会为 Person 类生成一个名为 PersonBuilder 的内部类,包含与 Person 类字段对应的 setter 方法,并提供一个 build() 方法用于最终创建 Person 对象。使用方式如下:

Person person = Person.builder()
    .firstName("John")
    .lastName("Doe")
    .age(30)
    .address("123 Main St.")
    .build();
1
2
3
4
5
6

# 2.2 方法级别 @Builder

如果只想针对某个工厂方法使用 @Builder,可以将其放在方法上。这样只会为该方法生成一个独立的 Builder 类:

public class Person {
    private String firstName;
    private String lastName;
    private Integer age;
    private String address;

    @Builder
    public static Person createPerson(String firstName, String lastName, int age, String address) {
        return new Person(firstName, lastName, age, address);
    }
}
1
2
3
4
5
6
7
8
9
10
11

使用方法:

Person person = Person.createPerson.builder()
    .firstName("John")
    .lastName("Doe")
    .age(30)
    .address("123 Main St.")
    .build();
1
2
3
4
5
6

# 3. 属性控制

# 3.1 @Builder.Default

如果希望某些非 final 字段在构建时拥有默认值,可以在这些字段上添加 @Builder.Default 注解:

@Builder
public class Person {
    private String firstName;
    private String lastName;
    @Builder.Default
    private Integer age = 18;  // 默认年龄为18
    private String address;
}
1
2
3
4
5
6
7
8

# 3.2 隐藏敏感字段

若要防止某些字段出现在 Builder 中,可以使用 @Builder 的 exclude 参数:

@Builder(exclude = {"sensitiveField"})
public class Person {
    private String firstName;
    private String lastName;
    private Integer age;
    private String address;
    private String sensitiveField;  // 不包含在 Builder 中
}
1
2
3
4
5
6
7
8

# 4. 构建器方法命名

默认情况下,生成的 Builder 类中的方法名与字段名相同。如果需要为某个字段的构建方法指定特定名称,可以使用 @Builder 的 setterPrefix 参数:

@Builder(setterPrefix = "with")
public class Person {
    private String firstName;
    private String lastName;
    private Integer age;
    private String address;
}

// 使用时:
Person person = Person.builder()
    .withFirstName("John")
    .withLastName("Doe")
    .withAge(30)
    .withAddress("123 Main St.")
    .build();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 5. 继承与 @SuperBuilder

对于继承关系中的类,如果需要在子类中使用 Builder 模式,可以使用 @SuperBuilder 注解。@SuperBuilder 会为父类和子类分别生成 Builder 类,子类 Builder 可以正确处理父类的属性:

import lombok.experimental.SuperBuilder;

@SuperBuilder
public abstract class Employee {
    private String id;
    private String department;
}

public class FullTimeEmployee extends Employee {
    private Double salary;
    private Integer vacationDays;
}

// 使用时:
FullTimeEmployee employee = FullTimeEmployee.builder()
    .id("123")
    .department("Sales")
    .salary(50000.0)
    .vacationDays(20)
    .build();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

总结起来,@Builder 注解极大地简化了复杂对象的创建过程,提供了清晰的构建逻辑和可读性良好的代码。通过灵活运用其提供的各种属性和扩展功能,可以满足不同场景下的对象构建需求。同时,注意遵循最佳实践,避免因滥用 Builder 导致的问题,如过度复杂的构建链或默认值失效等情况。

上次更新: 2024/10/26 02:01:17
lombok注解使用小结
异常相关注解

← lombok注解使用小结 异常相关注解→

Theme by Vdoing | Copyright © 2024-2025 泪伤荡 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式