这是不好的做法,让一个回报“这”?

问题:

这是一个好的还是坏主意,让java在java中返回“this”?

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

这种模式可以是有用的,因为你可以这样链接setter:

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类用于创建对象。

回答:

我不认为有什么具体的错误,它只是一个风格的问题。在以下情况下有用:

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

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

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

如果你一次只能设置一些属性,那么我会说这不是值得的。如果您稍后决定退回其他方式(如状态/成功指标/讯息),那肯定会下降。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Is it bad practice to make a setter return “this”?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 29 = 35