如果一个方法填充/修改一个对象,是否最好返回该对象或将返回类型保持为void,该方法是否会通过引用修改Object?
public Obj populate(Obj o)
{
....
return o;
}
public void populate(Obj o)
{
....
}
我知道这是一个微不足道的问题,但哪一个是最受欢迎的?
答案 0 :(得分:2)
我取决于你的风格,但返回的一个好处是:你可以调用populate(o).doSomethingElse();
,即你可以链接方法调用。
看看StringBuilder
如何做到这一点,例如,允许这样的事情new StringBuilder().append("a").append("b")....
答案 1 :(得分:2)
答案 2 :(得分:1)
我会说“第一个”选项,返回对象。这没有任何缺点,并且在未修改签名的情况下,为将来更改实现留下“空间”(例如,返回“深层复制”而不是相同的对象)。
简而言之,我认为它更灵活。
答案 3 :(得分:0)
我会选择第一个,因为它允许您选择修改传递的对象并将其返回,或者获取对象的副本并返回副本。
public Obj populate(Obj o)
{
Obj returnObj = o.clone();
....
return returnObj;
}
这允许您保留对原始对象的引用,并引用已修改的对象。
答案 4 :(得分:0)
最好修改对象this
并保持参数不变。
class ModifiedType {
public ModifiedType populate(UnmodifiedType arg) {
return this;
}
// or
public void populate(UnmodifiedType arg) {
}
}
以StringBuilder为例。
答案 5 :(得分:0)
第二个对我来说不那么容易混淆,因为从第一个看起来不清楚是否返回并且传递的对象是相同的,我觉得忽略返回的值是不正常的。