java – 这是不好的做法,使setter返回“this”?

在java中使setter返回“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类对象创建。

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

>您需要一次设置多个字段(包括在构建时)
>您知道在编写代码时需要设置哪些字段,以及
>对于您要设置的字段,有许多不同的组合。

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

>一个巨型构造函数(缺点:你可能传递大量的null或默认值,很难知道哪个值对应什么)
>几个重载的构造函数(缺点:一旦你有几个就笨重)
>工厂/静态方法(缺点:与重载的构造函数相同 – 一旦有几个就会变得笨重)

如果你只想一次设置几个属性,我会说不值得回来’这’。如果您以后决定返回其他内容,如状态/成功指示器/消息,它肯定会下降。

翻译自:https://stackoverflow.com/questions/1345001/is-it-bad-practice-to-make-a-setter-return-this

转载注明原文:java – 这是不好的做法,使setter返回“this”?