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

Java中如何实现类似SparkSession的链式调用(列表添加示例)

Java实现链式调用(类似SparkSession的.config()风格)

链式调用的核心逻辑很简单:每个修改对象状态的方法,执行完操作后返回当前对象的引用(return this;),这样就能在调用完一个方法后,直接接着调用同对象的其他方法,形成链式写法。

下面以“链式向列表添加字符串”的需求为例,完整实现类似Spark的调用风格:

1. 实现Builder类

import java.util.ArrayList;
import java.util.List;

public class StringListBuilder {
    // 内部维护的字符串列表
    private final List<String> stringList;

    // 私有构造方法,强制通过静态builder方法创建实例
    private StringListBuilder() {
        this.stringList = new ArrayList<>();
    }

    // 静态工厂方法,生成builder实例(对应SparkSession.builder())
    public static StringListBuilder builder() {
        return new StringListBuilder();
    }

    // 链式添加单个字符串的方法(对应Spark的.config())
    public StringListBuilder add(String str) {
        this.stringList.add(str);
        return this; // 关键:返回当前实例,支撑链式调用
    }

    // 可选:链式添加批量字符串的方法
    public StringListBuilder addAll(List<String> strs) {
        this.stringList.addAll(strs);
        return this;
    }

    // 最终获取构建完成的列表(对应Spark的.getOrCreate())
    public List<String> build() {
        // 返回新列表,避免外部直接修改内部状态
        return new ArrayList<>(this.stringList);
    }
}

2. 使用示例

public class Main {
    public static void main(String[] args) {
        List<String> result = StringListBuilder.builder()
                .add("Hello")
                .add("World")
                .add("Java")
                .addAll(List.of("Chain", "Call"))
                .build();

        // 输出:[Hello, World, Java, Chain, Call]
        System.out.println(result);
    }
}

关键设计说明

  • 和Spark的写法对齐:用静态builder()方法初始化实例,用链式方法修改状态,最后用build()/getOrCreate()返回最终对象
  • 每个链式方法必须返回this:这是实现连续调用的核心,确保每次调用后拿到的还是同一个Builder实例
  • 私有构造方法:避免直接创建对象,强制使用builder模式,让调用逻辑更清晰
  • 状态隔离:build()返回新的列表,防止外部代码修改Builder内部的原始列表,保证数据安全性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:35:17