不确定我为什么会收到此错误...这是方法(我相信我会返回所有必要的值)。有没有人知道我在语法方面缺少什么,或者你认为问题比这个堆栈跟踪更大吗?
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;
}
答案 0 :(得分:3)
您必须确保您的方法沿每个可能的代码路径返回一个值。在您的方法中,如果line0 != null
它将通过最后if
块而没有任何值返回。
解决此问题的最简单方法是在方法的最后添加return
语句,如下所示:
public bool equals(Object obj)
{
...
return false; // or true, depending on how you want it to behave
}
答案 1 :(得分:1)
您没有在最后一行返回值。
您有一系列返回值的if语句。如果这些表达式都不是真的,那么执行流程将落到方法的末尾,在那里你没有返回。
答案 2 :(得分: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
的情况有所不同,因此不会覆盖所述方法。