返回 this 是实现链式调用的核心机制,它使连续调用多个方法成为可能——每次调用后返回当前对象本身,从而支持如 obj.setname("a").setage(25) 的语法;若返回 void 则编译失败,若返回新对象则操作新实例,而返回 this 是在原对象上累积修改,典型用于 builder 模式、流式 api 和 fluent 接口。

返回 this 是实现链式调用(Method Chaining)的核心机制,它让连续调用多个方法成为可能——每次调用后不中断执行流,而是把当前对象本身传给下一次调用。
为什么必须返回 this?
普通方法默认返回 void 或其他类型,调用完就“断开”了。而返回 this 相当于告诉编译器:“我还在这个对象上,接着调用别的方法吧”。这本质上是把方法调用变成表达式,而非语句。
- 若方法返回
void,像obj.setName("A").setAge(25)会编译失败——因为setName()没有返回值,无法点出下一个方法 - 若返回新对象(如
String.toUpperCase()),链式调用仍成立,但操作的是新实例;而返回this是在原对象上累积修改,更符合构建器、配置类等场景
典型使用场景
最常见于 Builder 模式、流式 API 设计(如 StringBuilder、Lombok 的 @Builder)、以及自定义 Fluent 接口。
-
Builder 类:每个
withXxx()方法设置字段后返回this,最终调用build() -
配置类:如数据库连接配置对象,
config.url("...").timeout(3000).retry(2) -
集合工具类:某些封装类提供
add(...).remove(...).clear()这类可读性强的操作序列
写法要点与注意事项
不是所有方法都适合返回 this,关键看语义是否合理、是否破坏不可变性原则。
- 只在**修改当前对象状态且允许继续操作**的方法中返回
this;getter、校验类方法一般不应返回this - 避免在构造器或静态工厂方法中返回
this(构造器不能有返回值,静态方法的this无意义) - 如果类设计为不可变(Immutable),则不应返回
this,而应返回新实例——此时链式调用依然存在,但语义是“生成新对象”,而非“修改自身” - IDE 通常能识别这种模式,支持自动补全后续方法,提升开发体验
一个最小可运行示例
下面是一个简化版的链式字符串处理器:
class StringProcessor {
private String value = "";
StringProcessor append(String s) {
this.value += s;
return this; // ← 关键:返回当前实例
}
StringProcessor toUpperCase() {
this.value = this.value.toUpperCase();
return this;
}
String get() {
return this.value;
}
}
// 使用:
String result = new StringProcessor()
.append("hello")
.append(" world")
.toUpperCase()
.get(); // → "HELLO WORLD"
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











