Java返回Object /修改对象(编码指南)

时间:2011-07-07 11:03:46

标签: java coding-style reference

如果一个方法填充/修改一个对象,是否最好返回该对象或将返回类型保持为void,该方法是否会通过引用修改Object?

public Obj populate(Obj o)
{
....
return o;
}

public void populate(Obj o)
{
....
}

我知道这是一个微不足道的问题,但哪一个是最受欢迎的?

6 个答案:

答案 0 :(得分:2)

我取决于你的风格,但返回的一个好处是:你可以调用populate(o).doSomethingElse();,即你可以链接方法调用。

看看StringBuilder如何做到这一点,例如,允许这样的事情new StringBuilder().append("a").append("b")....

答案 1 :(得分:2)

一般情况下我会选择Command-Query separation

也就是说,如果方法改变了参数,它也不应该返回参数。

然而(如上面的维基百科文章中所述)违反这一一般原则的情况是适当的。

答案 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)

第二个对我来说不那么容易混淆,因为从第一个看起来不清楚是否返回并且传递的对象是相同的,我觉得忽略返回的值是不正常的。