为何未赋值的方法返回引用可直接链式调用?附Java示例
为什么可以直接链式调用increment方法?
这其实是Java里很常用的**方法链(Method Chaining)**写法,咱们一步步拆解就懂了:
核心原因:方法返回了对象引用
先看你代码里的方法声明 Leaf increment(); —— 这个方法明确返回了Leaf类型的引用。通常这类方法的实现会返回当前对象本身(也就是this关键字指向的实例),比如完整的实现可能是这样:
public class Leaf{ Leaf increment() { // 这里写你的增量逻辑,比如修改某个成员变量的值 return this; // 返回当前调用该方法的对象引用 } public static void main(String[] args){ Leaf x = new Leaf(); x.increment().increment(); } }
链式调用的执行流程
x.increment().increment() 的执行步骤其实和你分步写的逻辑完全一致:
- 首先调用
x.increment(),方法执行完成后返回一个Leaf类型的引用(在上面的实现里,这个引用就是x自己) - 紧接着,直接用这个返回的引用调用第二个
increment()方法 —— 这和你把返回值赋值给temp后再调用temp.increment()是一模一样的,只是省略了中间变量而已。
和分步写法的等价性
你觉得容易理解的分步代码:
Leaf temp = new Leaf(); temp = x.increment(); temp.increment();
和链式调用的逻辑完全等价,只是链式调用把「保存中间引用」和「调用方法」这两步合并成了一行代码,让写法更简洁。
这种设计在Java里非常常见,比如StringBuilder的append()方法就是返回自身实例,所以你经常能看到类似 new StringBuilder().append("Hello").append(" World").toString() 的链式调用写法。
内容的提问来源于stack exchange,提问作者zzkyeee
相关产品推荐
相关产品推荐

