返回this能实现链式调用,因为每个方法返回当前对象实例,使obj.method1().method2()连续调用成为可能;需声明当前类为返回类型、末尾return this,适用于builder等可变对象场景。

Java 中返回 this 是实现流畅接口(Fluent API)最常用、最直接的方式,它让方法调用可以链式进行,提升代码可读性和使用体验。
为什么返回 this 能支持链式调用
链式调用的本质是每次调用方法后返回一个对象,该对象仍具备后续方法的调用能力。当方法返回 this,即当前实例本身,就允许在同一个对象上连续调用多个方法,无需反复写出变量名。
- 每个 setter 或配置方法返回
this,而不是void - 调用者不必拆成多行或重复引用变量,例如:
builder.setName("A").setAge(25).build() - 编译器能静态检查链式调用的合法性,避免运行时错误
典型实现:Builder 模式中的 this 返回
Builder 模式是 Fluent API 的经典场景。通过让每个设置方法返回 builder 自身,用户能自然地串起多个配置步骤。
示例:
public class PersonBuilder {
private String name;
private int age;
public PersonBuilder name(String name) {
this.name = name;
return this; // 关键:返回当前 builder 实例
}
public PersonBuilder age(int age) {
this.age = age;
return this;
}
public Person build() {
return new Person(name, age);
}
}
使用时:Person p = new PersonBuilder().name("Alice").age(30).build();
注意事项与常见陷阱
虽然返回 this 简单有效,但需注意设计一致性与语义合理性。
- 只对改变当前对象状态且不产生新实例的方法返回
this;若方法本应返回新对象(如不可变类的withXxx()),则应返回新实例而非this - 避免在构造器或静态工厂中返回
this(构造器不能有返回值) - 继承场景下,若子类方法也想支持链式调用,需将返回类型声明为泛型或使用协变返回(Java 5+ 支持),例如:
public <t extends personbuilder> T name(String name)</t>或直接用子类类型重写
与函数式风格的对比
返回 this 属于命令式链式调用,强调“修改自身”;而函数式风格(如 Stream API)通常返回新对象,保证不可变性。两者适用场景不同:
- 配置类、构建器、DSL 类接口适合返回
this,侧重便捷和可读 - 数据处理、集合操作推荐返回新对象,利于线程安全和组合复用
- 混合使用也可行,例如 Lombok 的
@Builder默认生成返回this的方法,而 Guava 的ImmutableList.Builder也遵循相同模式
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











