1.什么是链式调用?
Person person = new Person().setName(fog).setAge(18).setSex(man).setJob(software engineer);

2.优势和好处

有以上的代码,好处显而易见:代码量大幅度减少,逻辑集中清晰明了,且易于查看和修改。

3.背后的实现原理

一般而言,我们在设置set,get的方法的时候,在对应的方法里都是返回的void。

从某种意义上来说,代码的返回值是一个必须要执行的步骤,直接返回void是一种浪费,而我们实现链式调用的关键步骤和原理就是这个返回值的不同。

public class Person {private String name;private String sex;private String job;private int age;public Person setJob(String job) {this.job = job;return this;}public Person setName(String name) {this.name = name;return this;}public Person setSex(String sex) {this.sex = sex;return this;}public Person setAge(int age) {this.age = age;return this;}
}

解析:

开始的那一串链式设置属性的实现代码,正是上面的形式。

对比而言,就是返回值的不同,一个是void,一个是this。

而实现连释电用的逻辑就是:

1.对于第一个设置属性的方法而言,新建一个对象的时候,正常的调用其方法,如果这个方法返回的是this,意味着将这个设置过属性的对象返回

2.那么对于第二个方法而言,是一个设置方法返回的是已经设置过属性的对象,而这个返回的对象也是有对应的属性设置方法的,这样一来,就相当于对一个创建的对象调用其属性设置方法,并且将这个对象返回

3.以此类推,上一个方法返回对象,是下一个调用方法的执行对象,依次执行下去,就成了链式调用方法

转载来自:链式调用方法的实现原理和方法 - thinfog - 博客园

链式调用方法的实现原理和方法相关推荐

  1. scala 函数方法、函数方法的实现原理

    文章目录 1. 函数&方法 2. 函数&方法的实现原理 1. 函数&方法   scala中方法是类的一部分,而函数是一个对象,可以赋值给一个变量.scala 中的方法跟 Jav ...

  2. jQuery 中 data 方法的实现原理

    jQuery 中 data 方法的实现原理 前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQue ...

  3. sort排序方法的实现原理

    sort 排序方法的实现原理   我们比较常用的是直接调用 JS的 sort方法,围绕原生 JS方法,并结合 V8排序的代码一起来分析,以便碰到类似的 JS排序问题时能够轻松应对.   在开始前请思考 ...

  4. JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏

    new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...

  5. vue源码解析:vue生命周期方法$destory方法的实现原理

    我们知道vue生命周期的最后一个阶段是销毁阶段,那么vue会调用自己的destory函数,那么$destory函数的实现原理是什么?且往下看. 用法: vm.$destroy() 作用: 完全销毁一个 ...

  6. matlab中二维插值中cubic方法的实现原理(个人见解)

    通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of         'nearest'   ...

  7. matlab中内插cubic,matlab中二维插值中cubic方法的实现原理(个人见解)

    通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of 'nearest'   - Neare ...

  8. Angular jasmine returnValue方法的实现原理

    一个实际的例子: 首先创建一个闭包函数this.plan,存储传入的期望返回值.this.plan是SpyStrategy的一部分. 紧接着返回spied wrapper函数,方便链式调用: call ...

  9. SAP Spartacus OccEndpointsService getUrl方法的实现原理

    源代码: /*** Returns a fully qualified OCC Url (including baseUrl and baseSite)* @param endpoint Name o ...

最新文章

  1. 使用DOM4J读和写文档
  2. 《scikit-learn》数据预处理与特征工程(三)特征选择
  3. apache php 整合 linux,Linux下Apache、php3、MySQL的整合
  4. 代码的c++实现_一文带你快速理解FreeRTOS代码规范~
  5. bzoj 4319: cerc2008 Suffix reconstruction(构造)
  6. byte转换字符串(string)+字符串转换byte
  7. 每日一题/010/微积分/极限/换元/取指数
  8. javascript 中 parentNode,childNodes、children 应用
  9. 教资考试中计算机知识常考点,教师资格证笔试:初中美术必背考点汇总(3)...
  10. 网页(手机wap)如何让广告点击后不再显示?您该这样写代码
  11. fixed trait
  12. RGB-Infrared Cross-Modality Person Re-Identification---阅读
  13. 编写函数,输入一个自然数n,如果n为奇数,输出表达式1+1/3+…+1/n的值;如果n为偶数,输出表达式1/2+1/4+…+1/n的值;输出表达式结果保留2位小数。
  14. 听“前微软系”AI大牛讲“京东新生活”
  15. java使用二维数组和控制台实现五子棋单机版
  16. prometheus grafana graylog 钉钉告警 短信告警 电话告警系统 PrometheusAlert
  17. Excel如何把身份证号码升级到18位
  18. np.unravel_index
  19. 360 evpp现代化C++11高性能TCP UDP HTTP网络库
  20. 2021-2027全球与中国台式X射线衍射仪市场现状及未来发展趋势

热门文章

  1. 自动备份 SourceSafe
  2. 【读书笔记】周志华《机器学习》第三版课后习题讨第一章-绪论
  3. Java CompletableFuture
  4. 《Spring Boot官方指南》28.安全
  5. 排序算法之归并排序(JAVA)
  6. mysql5.0.x统计每秒增删改查替换数及系统每秒磁盘IO
  7. Python体验(01)-变量、函数和基本控制语句
  8. CentOS7虚拟机优化
  9. 设置eclipse的Maven插件引入依赖jar包后自动下载并关联相应的源码(转)
  10. 【ARM-Linux开发】DRM学习(一)