为什么 eclipse 说我在这个方法中没有 return 语句

Why does eclipse say I have no return statement in this method

我为我在 java 中用 Eclipse IDE 做的 class 写了一个辅助方法。该方法的代码如下

private foo getfooMonitor(String id)
{
    if(fooList.isEmpty())
    {
        if (Mgr.getValue(Name, ListPath + id) == null)
        {
            return null;
        }
    }
    else
    {
        for(foo f : fooList)
        {
            if(f.getID().equalsIgnoreCase(id))
            {
                return foo;
            }
        }
        return null;
    }
}

我很好奇为什么如果该方法将被强制执行 return 某事,因为它有一个 if then else 块,无论如何都有一个 return 语句命中,为什么eclipse 会认为我没有 return 语句吗?

这个 eclipse 是否强制执行了一些奇怪的语法,因为它无法解析 if then else 块以查看该方法将被强制为 return,或者这是一个 java 没有的东西允许 non void 方法有效,除非它有一个 return 语句作为方法主体的最后一行?

并非所有路径return。如果 Mgr.getValue(Name, ListPath + id) == null return 为 false 那么您的方法没有 return 值

并非每个执行路径都有一个 return 值:如果 fooList.isEmpty(),但是 Mgr.getValue(Name, ListPath + id) != null 呢?永远不会输入内部 if。外面的 else 被忽略了,因为外面的 if 被输入了。因此,程序到达一个状态,方法结束,但没有 returned.

旁注:关于执行路径,Java 编译器非常愚蠢。以下面的方法为例:

boolean isTrue(boolean value) {
    if (value) {
        return (true);
    }
    if (!value) {
        return (false);
    }
}

通过tertium non datur,执行第一个或第二个if。但是这段代码仍然给出相同的编译错误。获得此 运行 的唯一方法是将 if (!value) 更改为 else(这在语义上是相同的)。

您在原始 if 语句的嵌套 if 语句中只有一个 return 语句。如果 Mgr.getValue(Name, ListPath + id) != null 但外部语句有效,则没有 return 语句。

private foo getfooMonitor(String id)
{
    if(fooList.isEmpty())
    {
        if (Mgr.getValue(Name, ListPath + id) == null)
        {
            return null;
        } else {
            //this path does not return a value 
        }
    }
    else
    {
        for(foo f : fooList)
        {
            if(f.getID().equalsIgnoreCase(id))
            {
                return foo;
            }
        }
        return null;
    }
}

看到没有return的路径用注释指出。