我正在做一个基于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)的一部分。有时您想编写一个在堆栈上分配新实例的函数。有时您需要一些高级引用计数或垃圾收集系统。

10-08 01:45