链式调用要求每个方法返回this(可变类)或新对象(不可变类),方法需声明当前类类型并以return this;结尾,适用于builder模式和fluent api,但不可滥用在getter等违背语义的场景。

在Java中,this关键字返回当前对象的引用,正是这个特性让链式方法调用成为可能——每个方法执行完后返回 this,就能连续调用其他方法。
链式调用的核心:每个方法都返回 this
要支持链式调用,方法不能声明为 void,而必须返回当前对象(即 return this;)。这样上一个方法的返回值就是下一个方法的调用主体。
- 方法签名需声明返回类型为当前类(如
public Person setName(String name)) - 方法体内最后一行必须是
return this; - 避免在链式方法中返回新对象(除非刻意设计不可变风格),否则会中断链
典型使用场景:构建器模式与 fluent API
最常见的应用是在 Builder 模式或配置类中。例如定义一个 Person 类,支持连续设置属性:
public class Person {
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;
}
}
调用时可写成:new Person().setName("Alice").setAge(30);,语义清晰且代码紧凑。
注意事项:链式调用不改变方法语义
返回 this 不代表方法行为发生变化,它只是提供调用便利性。需注意:
- 方法仍应专注单一职责,不要为了链式而强行合并逻辑
- 如果某个操作本该返回其他类型(如查询方法),不应为支持链式而改返回
this,否则破坏接口契约 - 构造器、静态工厂方法、getter 方法通常不适合链式,它们有明确的语义边界
与不可变对象的配合
若采用不可变设计(如 String 或 LocalDateTime),链式方法应返回新实例而非 this。此时虽然也支持链式,但底层是新建对象:
- 例如
"hello".toUpperCase().trim()返回新字符串 - 这类链式依赖的是“返回新对象 + 方法名语义一致”,而非
this - 可变类用
this,不可变类用新实例,二者目的相同,实现不同
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











