链式调用方法的实现原理和方法
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 - 博客园
链式调用方法的实现原理和方法相关推荐
- scala 函数方法、函数方法的实现原理
文章目录 1. 函数&方法 2. 函数&方法的实现原理 1. 函数&方法 scala中方法是类的一部分,而函数是一个对象,可以赋值给一个变量.scala 中的方法跟 Jav ...
- jQuery 中 data 方法的实现原理
jQuery 中 data 方法的实现原理 前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQue ...
- sort排序方法的实现原理
sort 排序方法的实现原理 我们比较常用的是直接调用 JS的 sort方法,围绕原生 JS方法,并结合 V8排序的代码一起来分析,以便碰到类似的 JS排序问题时能够轻松应对. 在开始前请思考 ...
- JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏
new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...
- vue源码解析:vue生命周期方法$destory方法的实现原理
我们知道vue生命周期的最后一个阶段是销毁阶段,那么vue会调用自己的destory函数,那么$destory函数的实现原理是什么?且往下看. 用法: vm.$destroy() 作用: 完全销毁一个 ...
- matlab中二维插值中cubic方法的实现原理(个人见解)
通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of 'nearest' ...
- matlab中内插cubic,matlab中二维插值中cubic方法的实现原理(个人见解)
通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of 'nearest' - Neare ...
- Angular jasmine returnValue方法的实现原理
一个实际的例子: 首先创建一个闭包函数this.plan,存储传入的期望返回值.this.plan是SpyStrategy的一部分. 紧接着返回spied wrapper函数,方便链式调用: call ...
- SAP Spartacus OccEndpointsService getUrl方法的实现原理
源代码: /*** Returns a fully qualified OCC Url (including baseUrl and baseSite)* @param endpoint Name o ...
最新文章
- 使用DOM4J读和写文档
- 《scikit-learn》数据预处理与特征工程(三)特征选择
- apache php 整合 linux,Linux下Apache、php3、MySQL的整合
- 代码的c++实现_一文带你快速理解FreeRTOS代码规范~
- bzoj 4319: cerc2008 Suffix reconstruction(构造)
- byte转换字符串(string)+字符串转换byte
- 每日一题/010/微积分/极限/换元/取指数
- javascript 中 parentNode,childNodes、children 应用
- 教资考试中计算机知识常考点,教师资格证笔试:初中美术必背考点汇总(3)...
- 网页(手机wap)如何让广告点击后不再显示?您该这样写代码
- fixed trait
- RGB-Infrared Cross-Modality Person Re-Identification---阅读
- 编写函数,输入一个自然数n,如果n为奇数,输出表达式1+1/3+…+1/n的值;如果n为偶数,输出表达式1/2+1/4+…+1/n的值;输出表达式结果保留2位小数。
- 听“前微软系”AI大牛讲“京东新生活”
- java使用二维数组和控制台实现五子棋单机版
- prometheus grafana graylog 钉钉告警 短信告警 电话告警系统 PrometheusAlert
- Excel如何把身份证号码升级到18位
- np.unravel_index
- 360 evpp现代化C++11高性能TCP UDP HTTP网络库
- 2021-2027全球与中国台式X射线衍射仪市场现状及未来发展趋势