0

不确定为什么我会收到此错误...这是方法(我相信我正在返回所有必要的值)。有没有人知道我在语法方面缺少什么,或者你认为问题比这个堆栈跟踪更大吗?

public bool equals(Object obj)
{
    if (this == obj)
    {
        return true;
    }

    if (obj == null)
    {
        return false;
    }

    if (GetType() != obj.GetType())
    {
        return false;
    }

    AccountNumber anotherObj = (AccountNumber) obj;

    if (failedCheckSum != anotherObj.failedCheckSum)
    {
        return false;
    }

    if (notValid != anotherObj.notValid)
    {
        return false;
    }

    if (line0 == null)
    {
        if (anotherObj.line0 != null)
        {
            return false;
        }
        else if (!line0.Equals(anotherObj.line0))
        {
            return false;
        }

        if (line1 == null)
        {
            if (anotherObj.line1 != null)
            {
                return false;
            }
            else if (!line1.Equals(anotherObj.line1))
            {
                return false;
            }
        }

        if (line2 == null)
        {
            if (anotherObj.line2 != null)
            {
                return false;
            }
            else if (!line2.Equals(anotherObj.line2))
            {
                return false;
            }
        }
        return true;
    }
4

3 回答 3

3

您必须确保您的方法沿每个可能的代码路径返回一个值。在您的方法中,如果line0 != null它将通过最后一个if块而没有任何返回值。

解决此问题的最简单方法是return在方法的最后添加一条语句,如下所示:

public bool equals(Object obj)
{
    ...

    return false; // or true, depending on how you want it to behave
}
于 2013-11-04T20:18:18.750 回答
1

您没有在最后一行返回值。

您有一系列返回值的 if 语句。但是,如果这些表达式都不为真,则执行流程将一直持续到方法的末尾,您将无法返回。

于 2013-11-04T20:17:49.290 回答
0

遵循建议并注意注释 - 这确实解决了问题。

考虑重写你所有的:

if (anotherObj.line1 != null)
{
    return false;
}
else if (!line1.Equals(anotherObj.line1))
{
    return false;
}

使用object.Equals(object,object)。然后它看起来更像:

if (!object.Equals(line1, anotherObj.line1)) {
  return false;
}

进行此更改还显示if (line0 == null) {打开了不正确的嵌套1。如果使用逻辑运算符将多个条件分组到一个if..return false构造中,则可以进一步看出这一点。

这些更改应该使“丢失的返回”(这是错误的原因)很容易找到。


1我认为这所呈现代码的核心问题,因为return true它位于条件块,因此存在没有返回的执行路径。


另外,请确保实际覆盖bool Equals(object). 以上内容equals因情况而异,因此不会覆盖所述方法。

于 2013-11-04T20:23:42.043 回答