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
相关产品推荐
相关产品推荐

