一尘不染

让二传手返回“ this”是否是错误的做法?

java

使Java中的setter返回“ this”是好是坏的主意?

public Employee setName(String name){
   this.name = name;
   return this;
}

此模式很有用,因为这样您就可以像这样链接设置器:

list.add(new Employee().setName("Jack Sparrow").setId(1).setFoo("bacon!"));

代替这个:

Employee e = new Employee();
e.setName("Jack Sparrow");
...and so on...
list.add(e);

…但是有点违反标准惯例。我想这可能是值得的,因为它可以使设置者做其他有用的事情。我已经看到此模式在某些地方使用过(例如JMock,JPA),但这似乎并不常见,并且仅用于定义非常明确的API,该模式随处可见。

更新:

我所描述的显然是有效的,但是我真正要寻找的是一些关于是否可以普遍接受以及是否存在陷阱或相关最佳实践的想法。我了解Builder模式,但它比我描述的要复杂得多-
正如Josh Bloch所描述的那样,有一个关联的静态Builder类用于对象创建。


阅读 176

收藏
2020-09-09

共1个答案

一尘不染

我不认为这有什么特别的问题,这只是风格问题。在以下情况下很有用:

  • 您需要一次设置多个字段(包括在施工中)
  • 您知道在编写代码时需要设置哪些字段,以及
  • 您想为哪些字段设置许多不同的组合。

此方法的替代方法可能是:

  1. 一个大型构造函数(缺点:您可能传递大量的null或默认值,并且很难知道哪个值对应什么)
  2. 几个重载的构造函数(缺点:一旦有多个,就会变得笨拙)
  3. 工厂/静态方法(缺点:与重载的构造函数相同-一旦存在过多,就会变得笨拙)

如果您一次只设置几个属性,我会说不值得返回“ this”。如果您以后决定返回其他内容,例如状态/成功指示符/消息,它肯定会掉下来。

2020-09-09