链式调用需每个方法返回this,即当前对象引用,以支持连续调用;要求方法返回类型为当前类、末尾return this、避免void;适用于状态修改操作,不适用于查询方法,且与builder模式本质不同。

在Java中,通过this关键字返回当前对象实例,可以让方法调用“串”起来,实现链式调用。核心在于:每个方法都返回this,而不是void或其它类型。
为什么链式调用需要返回this
链式调用的本质是连续调用同一对象上的多个方法,比如obj.doA().doB().doC()。要让doA()之后还能点出doB(),就必须让doA()返回一个具备doB()方法的对象——通常是它自己。this正是当前对象的引用,返回它就能继续调用同类方法。
基础写法:每个方法声明为返回当前类型
注意三点:方法返回类型必须是当前类(如Student),方法体末尾写return this;,且不能有void返回值。
- 定义一个普通类,例如
Student - 所有希望参与链式调用的方法,返回类型写成
Student(而非void) - 方法内部完成逻辑后,统一写
return this; - 调用时直接连写:
student.setName("张三").setAge(20).setGrade("A");
实际应用中的常见细节
链式调用不是“越链越多”就好,需兼顾可读性与合理性:
-
只对状态修改类方法使用:比如
setName()、addTag()这类改变对象内部状态的操作适合链式;而getName()、isValid()这类查询方法一般不参与链式(它们应返回具体值) -
构造器或静态工厂可配合使用:常搭配Builder模式,如
new Student().setName(...).setAge(...).build() - 避免在链中抛异常中断流程:如果某个方法可能抛出检查异常,需提前处理,否则链会在中途断开
- 不可用于final类或不可变对象:若对象创建后状态不允许修改(如String),链式调用就失去意义
和Builder模式的区别
链式调用不等于Builder模式。前者是实例方法返回this,操作的是当前对象;后者通常用独立的Builder类逐步组装参数,最后调用build()生成目标对象。两者可结合:Builder内部用链式,最终构建出的对象也可支持链式修改(视设计而定)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











