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 时,一定要判断对象当前真正的类型。

相关推荐
学长毕设13 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
C^h13 小时前
c++ string
开发语言·c++
raindayinrain13 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
驰骋工作流13 小时前
流程时效考核的表结构:从待办时限到 WF_CH 考核结果驰骋BPM驰骋低代码低代码工作流引擎
android·低代码·rxjava
学逆向的13 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao14 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
zzu123zsw14 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
学逆向的14 小时前
C 局部静态变量
c语言·开发语言·网络安全
大都督会赢的15 小时前
C++第一节课
开发语言·c++
“AI国潮设计-小江”15 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc