链式调用

转载,马克用

开发中经常会遇到给对象Been赋值,比如说一个Person对象,给他设置name 和 age 属性:

Person person=new Person();
person.setName("Tom");
person.setAge(18);
 
 
  • 1
  • 2
  • 3

这种情况下每一次设置它的一个属性的时候都要调用,总的来说是 Object.method() 形式的调用。当这个对象的属性值比较少的时候还好,但是当这个对象的属性多达几十个的时候,这种形式的调用无疑是很麻烦的,这个时候我们就会突然想到 StringBuffer ,记得 StringBuffer 在append() 的时候可不是这样写的。

StringBuffer stringBuffer =new StringBuffer();
stringBuffer.append("我").append("叫").append("X").append("X").append("");
 
 
  • 1
  • 2

StringBuffer 采用的是 Object.method().method().method().method()····的形式,这个就是链式调用。一个两个的时候好像没什么差别,但是次数多了之后就不是一回事了,代码量大量得减少了,那么我们也可以将 我们的Person 对象改造成 StringBuffer 类似,采用一样的调用。 
那我们点进去 StringBuffer 的 append() 方法看下,看下它是如何实现的。

public synchronized StringBuffer append(String str) {
    super.append(str);
    return this;
}
 
 
  • 1
  • 2
  • 3
  • 4

方法里面就两行, super.append(str); 调用父类的 append() 方法来执行 append() 逻辑,关键是第二行, return this; 将 StringBuffer 对象返回,还没看出来,那我们来和 Person 对象的方法比较下,这个是Person 的 setAge() :

public void setAge(int age) {
    this.age = age;
}
 
 
  • 1
  • 2
  • 3

到这就可以看出区别来了,一般的设置属性是个无返回值的void 方法,只是单纯的去执行设置值得逻辑,但是 StringBuffer 除了执行设置值得代码,还将本身这个StringBuffer 对象返回了,所以Person.setAge(18) 只是一句调用,但是 StringBuffer.append(“我”) 它不仅仅是一句调用,它本身就是该 StringBuffer 对象,所以他可以重复的调用方法,清楚之后我们就可以改造 Person 对象了。

public Person setAge(int age) {
    this.age = age;
    return this;
}
 
 
  • 1
  • 2
  • 3
  • 4

我们将Person 内的 set 方法都添加返回值,这个返回值就是此 Person对象,改造完之后我们来试下链式调用:

Person person=new Person();
person.setAge(18).setName("Tom");
 
 
  • 1
  • 2

成功,改造成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值