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

传统set+new写法与Builder写法的区别

这段代码:

Employee employee = Employee.builder().status(status).id(id).build();

和传统的

Employee employee = new Employee();
employee.setStatus(status);
employee.setId(id);

功能上完全一样:最终都得到一个新的 Employee 对象,并把 statusid 两个字段赋好值。
区别主要体现在 写法、可读性、可维护性 上。


  1. 语法层面
  • builder 写法
    ‑ 依赖 Lombok@Builder(或手写 Builder 类)。
    ‑ 链式调用,像拼积木一样把字段一次性“流式”地拼完,再 build()

  • 传统写法
    ‑ 先 new,再逐个 setXxx(),代码呈“命令式”两步走。


  1. 优点对比
维度Buildernew + set
可读性高:一眼看出所有赋值字段低:set 调用散落在多行,容易遗漏
不可变对象天然支持:字段可设为 final,只在 build() 时一次性写入难:必须手写全参构造,且后续仍可 set
可选参数/默认值优雅:想设几个就链几个,未设置的走默认值麻烦:要么重载 N 个构造,要么不断 set
线程安全build 完就是不可变,后续无并发修改风险set 调用可被并发篡改
样板代码量一个 @Builder 注解搞定需要大量 set/get 或重载构造

  1. 运行层面
  • 性能:两者都只是一次对象创建 + 两次字段赋值,差别微乎其微。
  • 字节码:builder 会额外生成一个静态内部类 EmployeeBuilder,占用几 KB 内存,对应用整体影响可忽略。
  • 空指针/合法性校验:builder 可在 build() 方法里集中校验;传统写法需自己再写校验逻辑。

  1. 何时用哪种?
  • 简单 POJO、字段很少、确定可变 → new + set 足够。
  • 字段较多(>4 个)、希望不可变、需要默认值、链式调用 → builder 更好。
  • 需要与 JSON/YAML 映射框架(Jackson、SnakeYAML)配合 → builder 同样方便,它们都支持无参构造 + setter,也支持 builder 模式。

一句话总结:
builder 写法是语法糖,让你“像构造器一样一次性赋值”,既保持了可读性,又天然支持不可变和可选字段,而传统 new + set 更直观但啰嗦、易错。

http://www.dtcms.com/a/355654.html

相关文章:

  • LightRAG
  • 客户案例 | 柳钢集团×甄知科技,燕千云ITSM打造智能服务新生态
  • 第1.9节:神经网络与深度学习基础
  • 基于matplotlib库的python可视化:以北京市各区降雨量为例
  • “今年业务是去年5倍以上”,工业智能体掀热潮
  • 拉普拉斯变换求解线性常系数微分方程
  • 数字接龙(dfs)(蓝桥杯)
  • npm install 安装离线包的方法
  • 【论文阅读】健全个体无辅助运动期间可穿戴传感器双侧下肢神经机械信号的基准数据集
  • 如何打造品牌信任护城河?
  • Spark入门:从零到能跑的实战教程
  • 腾讯云重保流程详解:从预案到复盘的全周期安全防护
  • ♻️旧衣回收小程序|线上模式新升级
  • 网页爬虫的实现
  • 苹果ImageIO零日漏洞分析:攻击背景与iOS零点击漏洞历史对比
  • 2025 深度洞察!晶圆背面保护膜市场全景调研与投资机遇解析
  • 推荐一款JTools插件Crypto
  • 基于Spring Session + Redis + JWT的单点登录实现
  • Redis使用简明教程
  • SQL 查询优化全指南:从语句到架构的系统性优化策略
  • 初识分布式事务
  • week5-[一维数组]归并
  • 数据结构与算法-算法-42. 接雨水
  • AI 如何 “看见” 世界?计算机视觉(CV)的核心技术:图像识别、目标检测与语义分割
  • Scrapy 框架实战:构建高效的快看漫画分布式爬虫
  • 试验铁地板在现代工业中的应用与特性
  • AI医疗影像诊断新突破:从肺部CT结节识别到眼底病变筛查,提升疾病早诊效率
  • MTK Linux DRM分析(十四)- Mediatek KMS实现mtk_drm_drv.c(Part.2)
  • 工业机器人如何通过Modbus TCP转CanOpen网关高效通信!
  • 机器学习基本介绍