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

Builder Pattern下如何为同结构属性设置不同构建器方法名?

解决Lombok Builder多方法名赋值同属性的问题

首先明确:@JsonAlias是Jackson序列化/反序列化的专属注解,仅负责JSON字段与Java属性的映射,和Lombok Builder的构建方法逻辑完全无关,所以用它实现Builder方法别名必然无效。

要让同一个属性支持不同的Builder方法名(比如metric()和state()),可以手动扩展Lombok生成的Builder类,添加自定义的赋值方法:

修改后代码示例

@Value
@Builder
public static class Input {
    String name;
    Source source;
}

@Value
@Builder
public static class Source {
    Metric metric;

    // 手动扩展Lombok生成的Builder类,添加state方法
    public static class SourceBuilder {
        // 实现和metric()完全一致的逻辑:为metric属性赋值
        public SourceBuilder state(Metric metric) {
            this.metric = metric;
            return this;
        }
    }
}

@Value
@Builder
public static class Metric {
    String ref;
}

验证两种构建方式

现在两种写法都能正常生成目标对象:

  1. 使用原方法名构建:
Input.builder()
        .name("state")
        .source(Source.builder()
            .metric(Metric.builder().ref("ref").build())
            .build())
        .build();
  1. 使用别名方法名构建:
Input.builder()
        .name("state")
        .source(Source.builder()
            .state(Metric.builder().ref("ref").build())
            .build())
        .build();

原理说明

Lombok的@Builder会自动生成静态内部Builder类(如SourceBuilder),我们可以手动为这个类补充方法。这里的state()方法本质就是给metric属性赋值,和自动生成的metric()逻辑完全一致,只是方法名不同,因此两种构建方式最终生成的对象结构完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:52:50