return this 是java中实现方法链的核心技巧,即在非静态实例方法中返回当前对象引用,使连续调用成为可能;需声明为当前类类型、不可与void共存,并适用于可变对象的流式构建,但不可用于静态上下文或不可变对象的真链式操作。

在Java中,return this 是实现方法链(Method Chaining)的核心技巧,它让对象方法调用更流畅、代码更简洁、意图更清晰。
什么是 return this?
return this 指在实例方法中直接返回当前对象(this)的引用。由于返回的是当前对象本身,后续可继续调用该对象的其他 public 方法,从而形成连续调用。
- 必须是非静态实例方法
- 返回类型需声明为当前类类型(或其父类/接口,但通常用本类)
- 不能与 void 返回类型共存——void 方法无法返回任何值
如何正确使用 return this 实现方法链
关键在于设计“可变操作”方法为流式风格:每个设置或修改类状态的方法都返回 this,而不是 void。
- 定义一个 Builder 或 Fluent 类型的 Java Bean,例如 PersonBuilder
- 每个 setter(如 setName()、setAge())不再返回 void,而是返回 this
- 最终提供一个 build() 方法返回实际对象,完成链式构建
示例:person.setName("Alice").setAge(25).setCity("Beijing").build();
return this 与不可变对象的配合
虽然 return this 常用于可变对象的链式调用,但它也可用于不可变对象设计——前提是每次“修改”都返回新对象,而非修改自身。
- String 的 toUpperCase()、substring() 等方法虽返回新对象,但不是 return this,而是 return new Xxx()
- 若要支持链式且保持不可变,应让每个操作返回新实例,此时不能用 return this,而要用 return new ClassName(...)
- 真正用 return this 的场景,本质是允许对象内部状态被逐步修改
注意事项和常见陷阱
滥用 return this 可能破坏封装性或引发意外行为,需谨慎权衡。
- 不要在有副作用或复杂校验的方法中盲目加 return this,比如 saveToDB() 不适合链式调用
- 避免在构造器或静态工厂方法中使用 —— this 在静态上下文中不可用
- 子类继承含 return this 的方法时,若希望链式调用返回子类类型,可结合泛型与 CRTP(Curiously Recurring Template Pattern)优化
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











