使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类用于对象创建。
我不认为这有什么特别的问题,这只是风格问题。在以下情况下很有用:
此方法的替代方法可能是:
如果您一次只设置几个属性,我会说不值得返回“ this”。如果您以后决定返回其他内容,例如状态/成功指示符/消息,它肯定会掉下来。