Lombok @Builder 踩坑:build() 前后对象类型不一样

文章目录

问题

最近在导出 Excel 时遇到一个问题。

我定义了一个自定义表头:

java 复制代码
@Data
@Builder
public class CustomHead {

    private String data;
    private Integer width;
    private Boolean hideColumns;
}

使用时写的是:

java 复制代码
headList.add(
    CustomHead.builder()
        .data("创建时间")
        .width(20)
        .build()
);

但是处理代码却是:

java 复制代码
if (head instanceof CustomHead.CustomHeadBuilder builder) {
    CustomHead customHead = builder.build();
    String[] split = customHead.getData().split("->");
    mapHead.put(split[split.length - 1], customHead);
}

结果这个判断没有进去,导致 Excel 的列宽等配置没有生效。

甚至表头显示成了:

text 复制代码
CustomHead(data=创建时间, width=20...)

原因

关键就在 .build()

java 复制代码
CustomHead.builder()

得到的是:

java 复制代码
CustomHeadBuilder

但是:

java 复制代码
CustomHead.builder().build()

得到的是:

java 复制代码
CustomHead

所以我已经 .build() 了,再判断:

java 复制代码
head instanceof CustomHead.CustomHeadBuilder

肯定是 false

应该判断:

java 复制代码
head instanceof CustomHead

修改后

java 复制代码
if (head instanceof CustomHead.CustomHeadBuilder builder) {
    CustomHead customHead = builder.build();
    String[] split = customHead.getData().split("->");
    mapHead.put(split[split.length - 1], customHead);
} else if (head instanceof CustomHead customHead) {
    String[] split = customHead.getData().split("->");
    mapHead.put(split[split.length - 1], customHead);
}

这样无论传入的是:

java 复制代码
CustomHead.builder()

还是:

java 复制代码
CustomHead.builder().build()

都可以正常处理。

总结

记住一句话:

builder()CustomHeadBuilder.build() 之后才是 CustomHead

所以使用 instanceof 时,一定要判断对象当前真正的类型。

相关推荐
智购科技自动售货机工厂5 小时前
2026自动售货机异常重启根因分析:从日志挖掘到内存取证的技术实践~YH
开发语言·数据库·单片机·嵌入式硬件·人机交互
RisunJan5 小时前
Android 面试知识点整理
android·面试·职场和发展
奈斯先生Vector5 小时前
从“能调用”到“可运营”:AI Agent 进入多模型时代后的架构升级
java·javascript·数据库·人工智能·算法·架构·aigc
Escalating_xu5 小时前
【C++类和对象(上)】从类的定义、封装与对象模型到内存对齐和 this 指针
开发语言·前端·c++
Json____5 小时前
宿舍安全卫生检查系统:Node 全栈开发实战
java·前端·数据库·毕业设计·课程设计·毕设·wwwoop.com
阿里嘎多学长5 小时前
2026-08-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
pnoker5 小时前
36 个驱动模块:应对协议碎片化
java·物联网·modbus·工业互联网·opc ua
码上有光5 小时前
Linux:进程控制和进程替换
java·linux·服务器·进程控制·进程替换
默辨5 小时前
我用Java后端的视角读了一遍JoyAgent-JDGenie
java·开发语言