使用 Lombok @Builder 修改对象:创建副本并修改

聖光之護

聖光之護

2025-07-28

812人浏览

原创

使用 lombok @builder 修改对象:创建副本并修改

本文介绍了如何利用 Lombok 的 @Builder 注解,结合 toBuilder = true 属性,实现对象的“修改”。虽然 @Builder 本身不直接修改现有对象,但通过创建原始对象的副本,并在此基础上修改特定字段,可以达到类似的效果,尤其适用于处理不可变对象。本文将提供详细的代码示例和解释,帮助你理解和应用这一技术。

Lombok 的 @Builder 注解简化了对象创建过程,尤其是在处理具有多个字段的类时。它自动生成一个建造者类,允许你以链式调用的方式设置对象的属性。然而,当需要修改已创建的对象时,直接使用 @Builder 似乎无法达到目的。实际上,@Builder 的设计初衷并非直接修改对象,而是通过创建新的对象来实现类似的效果。

使用 toBuilder = true 创建可修改的副本

为了实现“修改”对象的需求,Lombok 提供了 toBuilder = true 属性,可以添加到 @Builder 注解中。这个属性指示 Lombok 在生成的建造者类中包含一个 toBuilder() 方法。这个方法会创建一个新的建造者实例,该实例的初始状态是原始对象的副本。然后,你可以使用这个建造者实例来修改特定的字段,并最终构建一个新的对象。

示例代码

以下是一个简单的示例,展示了如何使用 toBuilder = true 来“修改”一个对象:

import lombok.Builder;
import lombok.Value;

@Value
@Builder(toBuilder = true)
public class Person {
    String name;
    int age;
}

在这个例子中,@Value 注解创建了一个不可变类 Person,这意味着一旦创建,Person 对象的属性就不能直接修改。@Builder(toBuilder = true) 注解生成了一个建造者类,并包含 toBuilder() 方法。

度加AI
度加AI

度加AI官网入口,百度官方 AIGC 创作平台,支持 AI 成片、AI 生文、数字人、声音克隆、配音字幕与智能剪辑等在线创作能力。

下载

现在,我们可以创建一个 Person 对象,然后使用 toBuilder() 方法创建一个副本,并修改副本的属性:

public class Main {
    public static void main(String[] args) {
        Person person1 = Person.builder()
                .name("Alice")
                .age(30)
                .build();

        System.out.println("Original Person: " + person1);

        Person person2 = person1.toBuilder()
                .age(31)
                .build();

        System.out.println("Modified Person: " + person2);
    }
}

这段代码的输出如下:

Original Person: Person(name=Alice, age=30)
Modified Person: Person(name=Alice, age=31)

可以看到,person2 是 person1 的副本,但 age 属性已经被修改为 31。原始对象 person1 保持不变。

注意事项

  • 不可变性: 这种方法特别适用于处理不可变对象。由于不可变对象不能直接修改,因此创建副本并修改是实现类似效果的常用方法。
  • 性能: 每次“修改”对象时,都会创建一个新的对象。对于性能敏感的应用,需要考虑这种方法的开销。
  • 替代方案: 如果对象是可变的,并且只需要修改少量属性,那么使用 Setter 方法可能更有效率。但是,对于复杂对象或需要保持对象状态一致性的情况,使用 @Builder 和 toBuilder = true 可以提供更清晰和可维护的代码。

总结

虽然 Lombok 的 @Builder 注解本身不直接修改对象,但通过结合 toBuilder = true 属性,我们可以创建原始对象的副本,并在此基础上修改特定的字段。这种方法尤其适用于处理不可变对象,可以提供一种优雅且类型安全的方式来“修改”对象。在选择使用这种方法时,需要权衡其性能开销和代码可维护性,并根据具体情况选择最合适的方案。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
火山引擎API接入教程
火山引擎API接入教程

火山引擎API接入适合需要在应用、脚本、后台服务或AI工具中调用火山引擎能力的开发者参考。本专题整理控制台入口、服务开通、API Key获取、接口地址配置、请求参数填写、调用测试、权限设置、额度查询和常见接口报错排查。

2026.08.04

0

10

火山引擎DeepSeek API调用教程
火山引擎DeepSeek API调用教程

火山引擎DeepSeek API适合需要在应用、脚本、智能体或AI编程工具中调用DeepSeek模型的开发者参考。本专题整理火山引擎控制台入口、模型服务开通、API Key获取、Base URL配置、模型名称填写、调用测试、额度查询和常见接口报错排查。

2026.08.04

0

10

火山引擎控制台操作教程
火山引擎控制台操作教程

火山引擎控制台中常用功能包括API密钥管理、模型调用配置、云资源查看、账单明细、用量统计和权限分配。本专题整理控制台基础操作、服务开通流程、Key创建与保存、费用消耗查看、子账号权限设置和调用失败排查,方便开发者完成日常管理。

2026.08.04

0

10

PDF与PPT格式转换操作方法及在线转换技巧
PDF与PPT格式转换操作方法及在线转换技巧

本专题聚焦 PDF 与 PPT 文件格式转换需求,整理 PDF 转 PPT 在线转换方法、PPT 批量转换 PDF 操作步骤、转换后格式错乱处理以及文档版式检查技巧。通过详细教程帮助用户掌握 PDF、PPT 双向转换方法,解决演示文稿制作、文件整理和办公格式转换中的常见问题,提高办公效率。

2026.07.31

112

6

PDF合并文件操作方法与在线批量合并技巧
PDF合并文件操作方法与在线批量合并技巧

本专题聚焦 PDF 文件合并与文档整理需求,整理多个 PDF 合并成一个文件、图片批量转换 PDF、合同附件合并发送以及在线 PDF 合并操作方法等实用教程。通过详细步骤介绍 PDF 合并流程、文件顺序检查技巧和免费在线合并方案,帮助用户快速整理零散文档,提高办公文件处理效率。

2026.07.31

86

8

PDF转Word在线转换与文档编辑处理方法
PDF转Word在线转换与文档编辑处理方法

本专题聚焦 PDF 转 Word 文件转换与办公文档处理需求,整理 PDF 在线转换成 Word、PDF 转可编辑 Word、PDF 文件格式转换操作步骤以及转换后版式错乱、图片无法编辑等常见问题解决方法。通过详细教程帮助用户快速掌握 PDF 转 Word 技巧,提高办公文件处理效率。

2026.07.31

87

5

CodeIgniter下载教程
CodeIgniter下载教程

本合集由PHP中文网精心整理,为您提供CodeIgniter下载教程与官方正版下载安装指南。内容涵盖CI3/CI4官方获取渠道、Composer依赖安装及环境配置全流程。助您安全、高效地搭建轻量级PHP框架,轻松开启Web应用开发之旅。

2026.07.30

116

10

CodeIgniter数据库配置指南
CodeIgniter数据库配置指南

PHP中文网为您提供CodeIgniter数据库配置指南合集。本专题全面解析CI框架数据配置方法,涵盖配置文件修改、多环境连接、动态切换数据库及常见连接错误排查等实战技巧。内容详实易懂,助您轻松掌握CodeIgniter数据库配置,快速解决开发难题,提升项目构建效率。

2026.07.30

44

15

Java面试题及答案整理合集
Java面试题及答案整理合集

本专题汇总了Java面试的常见题型与高频考点,涵盖基础知识(面向对象、集合、异常、IO/NIO)、多线程与并发(JUC、锁、线程池)、JVM内存模型与垃圾回收、Spring框架及MySQL数据库等核心模块。同时整理了历年面试真题及详细答案解析,并附有面试准备建议与项目经验参考,助你系统备战Java开发岗位面试。

2026.07.30

71

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程