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。これは、論理演算子を使用して複数の条件を 1 つの構造内にグループ化する場合にさらに見られますif..return false

この変更により、"missing return" (エラーの原因) が見つけやすくなります。


1これ提示されたコードの中心的な問題であり、その条件付きブロックreturn trueにあるため、リターンのない実行パスが存在することを提案します。


また、実際にオーバーライドするようにしてbool Equals(object)ください。上記equalsはケースが異なるため、上記のメソッドをオーバーライドしません。

于 2013-11-04T20:23:42.043 に答える