return this 是实现链式调用的关键,使构建者模式简洁、可读且类型安全;每个 setter 返回 this 实例以支持连续调用,build() 完成校验与对象创建。

在Java中,return this 是实现链式调用的关键技术,它让构建者模式(Builder Pattern)变得简洁、可读性强且类型安全。核心在于:每个设置方法返回当前对象实例(this),从而支持连续调用多个方法,最终调用 build() 完成对象构造。
为什么用 return this 而不是 void?
如果设置方法返回 void,每次调用后无法继续链式操作,必须拆分成多行、重复引用构建器变量;而返回 this 后,编译器能识别当前类型,保持方法调用的连贯性。注意:必须确保方法返回的是当前类实例(不能是父类或 Object),否则链式中断或失去类型提示。
构建器类的基本结构
典型构建器包含私有字段、带参构造器(可选)、一系列 setter 风格方法(均返回 this)、以及一个无参的 build() 方法。所有字段应在 build() 中校验并用于创建目标对象。
- 每个 setter 方法以
public Builder methodName(参数) { ... return this; }形式编写 -
build()方法应做必要校验(如非空检查),避免构建出非法状态的对象 - 构建器本身通常为静态内部类,与目标类解耦,也便于复用
一个实用的 PersonBuilder 示例
假设要构建 Person 对象,含 name、age、email 三个属性:
public class Person {
private final String name;
private final int age;
private final String email;
private Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.email = builder.email;
}
public static class Builder {
private String name;
private int age;
private String email;
public Builder name(String name) {
this.name = name;
return this; // 支持链式调用
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public Person build() {
if (name == null || name.trim().isEmpty()) {
throw new IllegalStateException("Name is required");
}
return new Person(this);
}
}
}
使用时只需一行即可完成构建:Person p = new Person.Builder().name("Alice").age(30).email("a@example.com").build();
进阶技巧与注意事项
实际项目中可进一步优化构建器体验:
- 支持默认值:在 Builder 构造器中预设常用字段值(如 age 默认 0,email 默认 "")
- 提供重载方法:例如
age(String str)自动解析字符串为整数,再调用age(int) - 避免可变状态污染:构建器实例不应被重复调用
build(),可在第一次构建后置空字段或加标志位防止误用 - Lombok 的 @Builder 注解可自动生成,但手动实现更利于理解逻辑和定制校验逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











