我正在做一个基于Head First Object Oriented Analysis and Design的示例,但是我正在用C++编写代码,我不知道如何从Java编写等效的“return null”。
Guitar getGuitar(string serialNumber)
{
for (vector<Guitar*>::iterator it = guitars.begin(); it != guitars.end(); ++it)
{
if ((*it)->getSerialNumber() == serialNumber)
{
return **it;
}
}
//return null ( java); What should return here ?!
}
最佳答案
Java引用就像C++指针一样。因此,如果您要返回对现有Guitar实例的引用或为null,那么您可能想要使函数返回Guitar *。
相比之下,您的代码实际正在执行的操作是返回一个新的Guitar,它是现有实例的拷贝。
通过比较,返回Guitar&也会返回对现有Guitar实例的引用,但不允许您返回null。
很明显,在退还Guitar *时,调用者应该知道这是现有实例,这是契约(Contract)的一部分。有时您想编写一个在堆栈上分配新实例的函数。有时您需要一些高级引用计数或垃圾收集系统。