return this 是java中实现方法链式调用的核心技巧,即在非静态实例方法中返回当前对象this,要求返回类型为当前类且不能为void,广泛应用于构建器模式、配置类和dsl风格api。

在Java中,return this 是实现方法链式调用(Method Chaining)的核心技巧,它让对象的方法调用更简洁、可读性更强,尤其在构建器(Builder)、配置类或流式API设计中非常实用。
什么是 return this?
它指在实例方法中返回当前对象本身(this),使调用者能连续调用该对象的其他方法。前提是方法必须是非静态、返回类型为当前类(或其父类/接口),且不能是 void。
例如:
public class User {private String name;
private int age;
public User setName(String name) {
this.name = name;
return this; // 返回当前实例
}
public User setAge(int age) {
this.age = age;
return this;
}
}
如何正确使用 return this 实现链式调用
-
所有参与链式调用的方法都必须返回 this,且返回类型需声明为当前类(如
User),不能是void或Object - 避免在链式方法中提前返回 null 或其他对象,否则链会中断;如有校验失败,建议抛异常而非静默返回
- 注意不可变性权衡:return this 通常用于可变对象;若类设计为不可变(如 String),则应返回新实例,而非 this
- 构造器或静态工厂方法更适合配合使用,比如先 new User(),再链式设置属性,或用 User.builder().name("A").age(25).build()
适用场景与典型例子
常见于以下三类设计:
-
构建器模式(Builder Pattern):如
new StringBuilder().append("a").append("b").toString() -
配置类(Fluent Configuration):如 OkHttp 的
OkHttpClient.Builder、Lombok 的@Builder注解生成代码 -
领域专用语言(DSL)风格 API:如 jOOQ 的查询构造:
create.select().from(table).where(field.eq(val)).fetch()
注意事项与潜在陷阱
-
不适用于 getter 方法:像
getName()应返回 String,而不是 this —— 否则语义混乱,违背直觉 -
继承场景需谨慎:子类调用父类链式方法后,若返回父类类型,可能丢失子类特有方法;可用泛型 + 自限定类型(
class Child extends Parent<child></child>)缓解 - 调试难度略增:单步调试时,一行多调用不易定位具体哪一步出错;必要时可拆分为多行提升可维护性
- 不要为了链式而链式:若方法逻辑复杂、有副作用或需明确分步处理(如事务边界、资源释放),强行链式反而降低清晰度
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











