在java中让setters返回"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);...but,它有点儿违背了标准惯例。我想这可能是值得的,因为它可以让setter做一些其他有用的事情。我曾见过这种模式在某些地方使用(例如JMock、JPA),但它似乎并不常见,而且通常只用于定义良好的API,在这些API中到处都使用这种模式。
更新:
我所描述的显然是正确的,但我真正寻找的是关于这是否普遍可接受的一些想法,以及是否存在任何陷阱或相关的最佳实践。我知道Builder模式,但它比我所描述的要复杂一些-正如Josh Bloch所描述的那样,有一个用于创建对象的相关静态Builder类。
发布于 2009-08-28 04:36:43
我不认为它有什么特别的问题,这只是一个风格问题。它在以下情况下很有用:
知道您需要一次设置多个字段(包括在construction)
此方法的替代方法可能是:
如果你只打算一次设置几个属性,我会说这不值得返回'this‘。如果你后来决定返回其他东西,比如状态/成功指示器/消息,它肯定会失败。
发布于 2009-08-28 04:25:52
这是一个不错的练习。这是一种越来越普遍的做法。大多数语言不需要处理返回的对象,所以它不会改变“正常”的setter使用语法,但允许您将setter链接在一起。
这通常称为构建器模式或fluent interface。
这在Java API中也很常见:
String s = new StringBuilder().append("testing ").append(1)
.append(" 2 ").append(3).toString();发布于 2009-09-02 03:32:41
总结一下:
<代码>F211
还有几点没有提到:
Query setWhatever(String What);
https://stackoverflow.com/questions/1345001
复制相似问题