链式调用需方法返回 this,即当前对象引用,返回类型须为当前类(或泛型自限定类型),适用于 setter、Builder 等场景;但不适用于需返回计算结果的方法,且可能影响调试。

在 Java 中,this 关键字代表当前对象的引用,正是利用这一点,我们可以在方法中返回 this,让调用者能连续调用其他方法,从而实现链式调用(Method Chaining)。
链式调用的核心:每个方法返回 this
要支持链式调用,方法必须声明返回类型为当前类类型(如 Person),并在末尾用 return this; 返回当前实例。这样上一次调用的结果仍是该对象,可继续调用它的其他方法。
- 返回类型不能是
void,否则无法接续调用 - 返回
this是安全的——它指向正在操作的那个对象,不是新创建的对象 - 适合用于设置器(setter)、构建器(Builder)或 Fluent API 设计
一个典型例子:Person 类的链式设置
比如定义一个 Person 类,姓名和年龄通过方法设置,并返回 this:
private String name;
private int age;
public Person setName(String name) {
this.name = name;
return this;
}
public Person setAge(int age) {
this.age = age;
return this;
}
public void print() {
System.out.println(name + ", " + age);
}
}
使用时就可以写成:
new Person().setName("Alice").setAge(25).print();
这行代码等价于依次调用三个方法,每次都基于同一个对象。
立即学习“Java免费学习笔记(深入)”;
注意返回类型与继承的关系
如果子类继承了支持链式调用的父类,但父类方法返回的是父类类型(如 Parent),子类调用后会丢失子类特有方法,导致链式中断。解决办法是:
- 使用泛型自限定(Self-Type):把父类声明为
class Parent<T extends Parent<T>>,方法返回T - 或在子类中重写方法,显式返回子类类型(需方法签名兼容,Java 允许协变返回类型)
- 更常见的是在 Builder 模式中,每个构建步骤都返回自身 Builder 实例
链式调用不是万能的,也有局限
它提升了可读性和简洁性,但要注意:
- 不适用于需要返回实际计算结果的场景(比如
getAge()应该返回int,而不是this) - 过度链式可能掩盖副作用,调试时难以打断点观察中间状态
- IDE 自动补全友好,但团队需统一风格,避免混用 void 和 this 返回的方法


















