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

时间:2015-06-10 17:26:30

标签: java eclipse methods syntax ide

我为使用Eclipse IDE在java中编写的类编写了一个帮助器方法。该方法的代码如下

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;
    }
}

我很好奇为什么如果该方法将被强制返回一些东西,因为它有一个if then else块,无论怎样都有一个return语句命中,为什么eclipse会认为我没有有退货声明?

这个eclipse是否强制执行一些奇怪的语法,因为它在解析if then else块时遇到问题,看不到该方法将被强制返回,或者这是一个不允许non void方法的java事物除非它有一个return语句作为方法体中的最后一行,否则有效?

4 个答案:

答案 0 :(得分:4)

并非所有路径都会返回。如果Mgr.getValue(Name, ListPath + id) == null返回false,则表示您的方法没有返回值

答案 1 :(得分:1)

并非每个执行路径都有返回值:如果fooList.isEmpty(),但Mgr.getValue(Name, ListPath + id) != null会怎样?永远不会输入内部if。外部else将被忽略,因为输入了外部if。因此,程序到达一个状态,该方法结束,但不返回任何内容。

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

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

通过tertium non datur,执行第一个或第二个if。但是这段代码仍然会产生相同的编译错误。实现此目标的唯一方法是将if (!value)更改为else(语义上相同)。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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;
    }
}

请参阅带有评论的无回报路径。