沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

  • 工具库篇

    • lombok工具库

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

    • 定时任务相关

    • Hutool工具库

    • 极光推送学习
    • OkHttp学习
    • BigDecimal类详解
    • PdfBox学习
    • OCR功能实现
  • 开发技巧篇

  • 工具类系列

  • 随笔

  • 开发日常
  • 工具库篇
  • 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/9/25 11:16:13
lombok注解使用小结
异常相关注解

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

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式