返回 this 是实现构建者模式链式调用的关键,因每个 setter 返回当前对象引用,使方法可连续调用;需所有 setter 返回 this、配合私有构造器与 build() 方法,并注意不可变性、类型安全及 build 后状态校验。

在 Java 中,用 this 返回当前对象实例是实现构建者模式(Builder Pattern)的核心技巧之一,它支持方法链式调用,让对象构造更清晰、灵活且类型安全。
为什么返回 this 能支持链式调用
每个 setter 方法返回 this(即当前对象引用),就能让下一次调用继续作用于同一个对象。这样就避免了重复写对象名,也无需创建中间变量。
- 返回类型必须是当前类(或其子类/接口),不能是
void - 所有设置属性的方法都需返回
this,才能串联 - 通常配合私有构造器 + 公共构建方法(如
build())完成最终对象创建
基本构建者模式结构示例
以一个简单的 User 类为例:
public class User {
private final String name;
private final int age;
private final String email;
// 私有构造器,强制通过 Builder 创建
private User(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.email = builder.email;
}
// 静态内部 Builder 类
public static class Builder {
private String name;
private int age;
private String email;
public Builder name(String name) {
this.name = name;
return this; // 返回 this,支持链式调用
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public User build() {
return new User(this);
}
}
}
使用时可写成:User user = new User.Builder().name("Alice").age(30).email("a@example.com").build();
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
注意事项和常见陷阱
返回 this 看似简单,但实际使用中容易出错:
立即学习“Java免费学习笔记(深入)”;
- 确保所有 setter 方法都返回
this,漏掉一个就会中断链式调用 - 不要在 setter 中修改不可变字段(如
final字段),Builder 模式本身应负责初始化,而非运行时修改 - 如果需要继承或扩展 Builder,考虑使用泛型自引用(如
class Builder<T extends Builder<T>>)来保持链式调用的类型安全 - 避免在
build()之后仍允许 setter 调用 —— 可在build()后置空状态或加校验防止误用
进阶:泛型自引用提升类型安全性
当 Builder 被继承时,直接返回 this 可能丢失子类类型信息。可用泛型解决:
public static class Builder<T extends Builder<T>> {
public T name(String name) {
this.name = name;
return (T) this;
}
// ...其他方法同理
}
子类 Builder 只需继承并指定自身类型,链式调用就能正确保留子类方法签名。

















