我为使用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语句作为方法体中的最后一行,否则有效?
答案 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;
}
}
请参阅带有评论的无回报路径。