You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lombok自定义Builder中直接返回目标类以避免双重build?

解决方案:避免双重build,让Builder直接返回SampleClass

当然可以解决这个问题!你现在需要两次build()的根本原因是:你给SampleClassBuilder加了Lombok的@Builder注解,这会让Lombok自动生成一套独立的builder机制——调用SampleClassBuilder.builder()返回的是Lombok生成的内部Builder实例,第一次build()会生成SampleClassBuilder对象,然后你才调用自己写的build()方法转成SampleClass,所以才需要两次调用。

下面给你两种简洁的解决方法:

方法一:移除Lombok@Builder,手动实现链式Builder

完全自己控制Builder的逻辑,不需要依赖Lombok的自动生成,直接让build()返回SampleClass:

public class SampleClassBuilder {
    private String x;
    private String y;

    // 私有构造,强制通过builder()入口创建实例
    private SampleClassBuilder() {}

    // Builder入口方法
    public static SampleClassBuilder builder() {
        return new SampleClassBuilder();
    }

    // 链式设置x,返回自身实现链式调用
    public SampleClassBuilder x(String x) {
        this.x = x;
        return this;
    }

    // 链式设置y
    public SampleClassBuilder y(String y) {
        this.y = y;
        return this;
    }

    // 直接返回SampleClass实例的build方法
    public SampleClass build() {
        SampleClass sampleClass = new SampleClass();
        sampleClass.setA(x + "testX");
        sampleClass.setB(y + "textY");
        return sampleClass;
    }
}

调用代码(只需一次build)

SampleClass sampleClass = SampleClassBuilder.builder().x("x -- ").y("y---").build();

方法二:利用Lombok@Builder注解静态工厂方法

如果还是想借助Lombok减少手动代码,可以把@Builder注解加在静态工厂方法上,让Lombok直接生成返回SampleClass的builder:

public class SampleClassBuilder {
    // 用@Builder注解静态方法,指定builder方法名为builder
    @Builder(builderMethodName = "builder")
    public static SampleClass buildSampleClass(String x, String y) {
        SampleClass sampleClass = new SampleClass();
        sampleClass.setA(x + "testX");
        sampleClass.setB(y + "textY");
        return sampleClass;
    }
}

调用代码(同样只需一次build)

SampleClass sampleClass = SampleClassBuilder.builder().x("x -- ").y("y---").build();

两种方案对比

  • 方法一:完全自定义,灵活度高,适合需要复杂builder逻辑的场景
  • 方法二:借助Lombok减少重复代码,适合逻辑简单的场景

核心思路就是避免Lombok生成的builder和你自己的build方法产生嵌套结构,让builder的最终build()方法直接返回目标SampleClass实例即可。

内容的提问来源于stack exchange,提问作者user1692342

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:39:32