考虑以下示例:
class Foo
{
private Bar x;
// ...
public Bar getAndResetX()
{
Bar result = x;
x = new Bar();
return result;
}
}
这些方法是否有既定的命名约定?像yieldX
,transferX
还是什么?
考虑以下示例:
class Foo
{
private Bar x;
// ...
public Bar getAndResetX()
{
Bar result = x;
x = new Bar();
return result;
}
}
这些方法是否有既定的命名约定?像yieldX
,transferX
还是什么?
我们曾经使用约定Adopt和Orphan作为前缀来在方法名称中提供意图(取自 Taligent 关于 C++ 的书)。
Bar b = foo.orphanBar(); // take Bar out of Foo
foo.adoptBar(b); // put it right back in
您可以使用类似的东西来提供对象的所有权线索。坦率地说,尽管我会坚持使用add和remove的 Java 约定。它们提供了足够的意图,其他程序员不需要阅读解释新约定的注释。
Bar b = foo.removeBar(); // take Bar out of Foo
foo.addBar(b); // put it right back in
我不确定这些方法是否有命名约定。恕我直言,我会使用动词take(例如takeX()
)。有关方法命名约定的更多信息,请参阅JLS §6.8.3 Method Names。
但老实说,这真的只是一个意见问题。如果您真的那么担心,我建议您浏览Java API以查找功能等效的方法,然后在这些方法名称之后建模您的方法名称。
Mozilla 的原生智能指针类使用该方法forget()
来指示所有权转移:
already_AddRefed<nsIFoo> GetFoo() {
nsCOMPtr<nsIFoo> foo = ...
...
return foo.forget();
}