转让所有权的方法的命名约定

时间:2011-09-08 12:17:14

标签: java naming-conventions transfer getter ownership

考虑以下示例:

class Foo
{
    private Bar x;

    // ...

    public Bar getAndResetX()
    {
        Bar result = x;
        x = new Bar();
        return result;
    }
}

这些方法是否有既定的命名约定?像yieldXtransferX或其他什么?

3 个答案:

答案 0 :(得分:2)

我们曾经使用常规采用孤儿作为前缀来提供方法名称中的意图(取自T ++上的C ++文章)。

Bar b = foo.orphanBar(); // take Bar out of Foo
foo.adoptBar(b); // put it right back in

您可以使用类似的东西来提供对象的所有权线索。坦率地说,虽然我坚持使用添加删除的Java惯例。它们提供了足够的意图,其他程序员不需要阅读解释新约定的评论。

Bar b = foo.removeBar(); // take Bar out of Foo
foo.addBar(b); // put it right back in

答案 1 :(得分:1)

我不确定这些方法是否存在命名约定。恕我直言,我会使用动词 take (例如takeX())。有关方法命名约定的更多信息,请参阅JLS §6.8.3 Method Names

但说实话,这只是一个意见问题。如果您真的那么担心,我建议您浏览Java API以获取功能相同的方法,然后在这些方法之后对方法名称进行建模。

答案 2 :(得分:0)

Mozilla的本机智能指针类使用方法forget()来表示所有权的转移:

already_AddRefed<nsIFoo> GetFoo() {
    nsCOMPtr<nsIFoo> foo = ...
    ...
    return foo.forget();
}