java中this关键字支持链式调用,要求方法返回当前类类型并用return this;典型应用如person类的setter链式调用,或builder模式中构建器的链式配置。

在 Java 中,this 关键字返回当前对象的引用,利用它返回 this 就能实现链式调用(Method Chaining)——即连续调用多个方法而无需重复写对象名。
链式调用的核心结构
每个需要参与链式调用的方法必须:
- 声明返回类型为当前类(如
public MyClass setName(String name)) - 在方法末尾用
return this;返回当前实例 - 避免返回
void,否则链式中断
一个典型示例
假设定义一个 Person 类,支持连续设置姓名、年龄和城市:
public class Person {
private String name;
private int age;
private String city;
public Person setName(String name) {
this.name = name;
return this; // 返回当前对象,支持下一次调用
}
public Person setAge(int age) {
this.age = age;
return this;
}
public Person setCity(String city) {
this.city = city;
return this;
}
@Override
public String toString() {
return String.format("Person{name='%s', age=%d, city='%s'}", name, age, city);
}
}
使用时可写成:Person p = new Person().setName("Alice").setAge(25).setCity("Beijing");
注意事项与常见陷阱
链式调用虽简洁,但需注意几点:
- 构造器不能链式调用(构造器无返回值),但可通过静态工厂方法 + 链式 setter 组合弥补
- 若某方法逻辑上不应被链式调用(如
build()或execute()),应将其返回类型设为非本类(如void或结果类型),以明确终止链 - 不可在链中混用返回
void的方法,否则编译报错 - 链式调用不改变调用顺序,仍按从左到右执行,适合构建器模式或配置类
配合 Builder 模式的增强写法
更规范的做法是分离构建逻辑,例如:
public class Person {
private final String name;
private final int age;
private final String city;
private Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.city = builder.city;
}
public static class Builder {
private String name;
private int age;
private String city;
public Builder name(String name) { this.name = name; return this; }
public Builder age(int age) { this.age = age; return this; }
public Builder city(String city) { this.city = city; return this; }
public Person build() { return new Person(this); }
}
}
调用:Person p = new Person.Builder().name("Bob").age(30).city("Shanghai").build();
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











