return this 是Java中实现链式调用和内建Builder模式的关键技术,即在实例方法中返回当前对象引用,要求方法返回类型为当前类,所有setter返回this并配合build()校验,适用于轻量级可变构建场景。

在Java中,return this 是实现链式调用(Method Chaining)的关键技术,也是构建Builder模式最常用、最简洁的方式之一。它让对象的属性设置过程更流畅、可读性更强,同时保持对象的不可变性或可控的构造逻辑。
什么是 return this?
return this 指的是在实例方法中直接返回当前对象引用(即 this)。前提是该方法的返回类型必须是当前类类型(或其父类/接口),不能是 void。
例如:
public Person setName(String name) {this.name = name;
return this;
}
如何用 return this 实现简易 Builder 模式
不依赖外部 Builder 类,直接在目标类中定义“设值 + 返回自身”的方法,即可支持链式构建:
立即学习“Java免费学习笔记(深入)”;
- 所有 setter 方法返回
this,而非void - 提供一个无参构造器(或私有构造器 + 静态工厂方法)
- 可选:添加
build()或create()方法,用于最终校验和封装
示例(简化版):
public class User {private String name;
private int age;
private String email;
public User() {}
public User setName(String name) {
this.name = name;
return this;
}
public User setAge(int age) {
this.age = age;
return this;
}
public User setEmail(String email) {
this.email = email;
return this;
}
public User build() {
if (name == null || email == null) {
throw new IllegalStateException("name and email are required");
}
return this;
}
}
使用方式:
User user = new User().setName("Alice")
.setAge(28)
.setEmail("alice@example.com")
.build();
与传统 Builder 模式的区别
经典 Builder 模式(如 StringBuilder 或 Guava 的 ImmutableList.Builder)通常将构建逻辑分离到独立的 Builder 类中,确保目标类本身不可变。而 return this 方式属于“内建 Builder”风格,特点包括:
- 代码更少,适合轻量级、非严格不可变场景
- 无法天然阻止用户在
build()后继续调用 setter(除非手动加状态控制) - 若需强不可变性,仍建议配合私有字段 + 公共 Builder 类
- 对 IDE 友好,链式调用时能自动提示后续方法
注意事项与最佳实践
使用 return this 构建链式 API 时,要注意以下几点:
- 避免在 setter 中做耗时或副作用操作(如网络请求、文件写入),否则链式调用语义易被误解
- 若字段有约束(如非空、范围检查),建议统一放在
build()中校验,而不是每个 setter 里重复判断 - 继承场景下,子类方法若也返回
this,需注意泛型或协变返回类型(Java 5+ 支持)以维持链式完整性 - 不要滥用:不是所有类都适合链式构建;过度链式可能降低调试可读性,尤其嵌套过深时



















