【问题标题】:naming convention for methods that transfer ownership转移所有权的方法的命名约定
【发布时间】:2011-09-08 12:17:13
【问题描述】:

考虑以下示例:

class Foo
{
    private Bar x;

    // ...

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

此类方法是否有既定的命名约定?比如yieldXtransferX 什么的?

【问题讨论】:

    标签: java naming-conventions transfer getter ownership


    【解决方案1】:

    我们曾经使用约定 AdoptOrphan 作为前缀来在方法名称中提供意图(取自 Taligent 关于 C++ 的书籍)。

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

    您可以使用类似的方法来提供对象的所有权线索。坦率地说,虽然我会坚持使用 addremove 的 Java 约定。它们提供了足够的意图,其他程序员不需要阅读解释新约定的注释。

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

    【讨论】:

      【解决方案2】:

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

      但老实说,这真的只是一个见仁见智的问题。如果您真的很担心,我建议您浏览 Java API 以查找功能等效的方法,然后在这些方法名称之后建模。

      【讨论】:

      • 我在想同一个动词。它在 JavaSpaces 中用于表示从空间中获取和删除对象。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-27
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2021-09-11
        • 2013-12-25
        相关资源
        最近更新 更多