小编典典

让二传手返回“this”是不好的做法吗?

all

让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);

…但它有点违反标准约定。我想这可能是值得的,因为它可以让那个 setter 做一些其他有用的事情。我已经看到这种模式在某些地方使用过(例如
JMock、JPA),但它似乎并不常见,并且通常仅用于定义非常明确的 API,而这种模式无处不在。

更新:

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


阅读 62

收藏
2022-05-10

共1个答案

小编典典

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

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

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

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

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

2022-05-10