转载,马克用
开发中经常会遇到给对象Been赋值,比如说一个Person对象,给他设置name 和 age 属性:
- 1
- 2
- 3
这种情况下每一次设置它的一个属性的时候都要调用,总的来说是 Object.method() 形式的调用。当这个对象的属性值比较少的时候还好,但是当这个对象的属性多达几十个的时候,这种形式的调用无疑是很麻烦的,这个时候我们就会突然想到 StringBuffer ,记得 StringBuffer 在append() 的时候可不是这样写的。
- 1
- 2
StringBuffer 采用的是 Object.method().method().method().method()····的形式,这个就是链式调用。一个两个的时候好像没什么差别,但是次数多了之后就不是一回事了,代码量大量得减少了,那么我们也可以将 我们的Person 对象改造成 StringBuffer 类似,采用一样的调用。
那我们点进去 StringBuffer 的 append() 方法看下,看下它是如何实现的。
- 1
- 2
- 3
- 4
方法里面就两行, super.append(str); 调用父类的 append() 方法来执行 append() 逻辑,关键是第二行, return this; 将 StringBuffer 对象返回,还没看出来,那我们来和 Person 对象的方法比较下,这个是Person 的 setAge() :
- 1
- 2
- 3
到这就可以看出区别来了,一般的设置属性是个无返回值的void 方法,只是单纯的去执行设置值得逻辑,但是 StringBuffer 除了执行设置值得代码,还将本身这个StringBuffer 对象返回了,所以Person.setAge(18) 只是一句调用,但是 StringBuffer.append(“我”) 它不仅仅是一句调用,它本身就是该 StringBuffer 对象,所以他可以重复的调用方法,清楚之后我们就可以改造 Person 对象了。
- 1
- 2
- 3
- 4
我们将Person 内的 set 方法都添加返回值,这个返回值就是此 Person对象,改造完之后我们来试下链式调用:
- 1
- 2
成功,改造成功。