所谓链式的setter 就是
bean.setProp1("1").setProp2("2")…setPropN("N")
这样的好处就是:一行代码就可以设置完尽量多的属性值。这在单元测试里特别有用。
举例来说,当你要设置一个Bean作为测试数据,如果不用链式,则
Bean bean = new Bean(); bean.setProp1("1"); bean.setProp2("2"); bean.setProp3("3"); assertEquals("XXX", bean.getXXX());
一共要写五行代码。
1. 由于普通的Setter不支持链式调用,因此3个属性要写3行set语句,每条语句里都要写一个"bean"字,即12个字母;
2. 另外,构造方法 new Bean()本来是链式的,但由于受到无链式setter的拖累,以致于必须显式地声明一个 "bean" 变量。
而如果我们用链式风格的setter的话,一行即可。
assertEquals("XXX",new Bean().setProp1().setProp2().setProp3().getXXX()));
看,多简洁! 可以采用匿名对象(new Bean()),并且不用换行。
当然了,这样做的好处主要是为了单元测试时准备数据。正式代码里可能不会一次性设置这么多属性,就算要设置这么多,这样写也会降低代码的可调试性。
你可能会问为什么不用一个 带有所有参数的构造方式? 我的看法是,
1.参数较多的构造方法比较丑陋,调用时也容易把参数顺序搞错。比如 new Name("Diego", "Maradona") 中,哪个是 first name, 哪个是 last name?
2.写带参构造方法比写无参和要累
3.最重要的是,新增属性时会使带参的构造方法不得不重构。很烦。