[英]Unreachable return statement in Java
我最近在5分钟前迅速得到了编译器错误unreachable statement
很快就编写了这个小函数
private static boolean isTransientField(String name, Class beanClass) {
try {
Field field = beanClass.getDeclaredField(name);
return (field.getModifiers() & Modifier.TRANSIENT) == Modifier.TRANSIENT;
} catch (Exception e) {return false;}
return false;//unreachable statement
}
显然我的最后一个return false
是无法到达的,但是为什么我的catch
块仅在特殊情况下运行?
因为您在尝试中有一个return语句。
您的代码中只有两个可能的执行路径。
1.线
Field field = beanClass.getDeclaredField(name);
...按预期工作,下一行返回:
return (field.getModifiers() & Modifier.TRANSIENT) == Modifier.TRANSIENT
2.发生异常,执行catch块中的返回。
给定这两个路径,就永远无法达到第三个return语句。
因为在try块的末尾也有返回。
因为您的try块中也有返回值,所以无论如何,在try catch构造中都会达到返回值。
您所拥有的基本上等同于以下内容:
if (something)
return true;
else
return false;
else
return false;
现在,为什么还要另外两个语句? 没错,您不会。
尽管上述所有内容都是正确的,但原因是您的代码将通过快乐路径成功处理并返回,或者将引发异常并进行相应处理,因此,实质上,您提供了if / else执行路径。 编译器将永远不会到达第三个return语句。 如果您删除了return false; 从捕获块,警告将消失。 如果您将以某种方式处理您检查的异常(重新抛出堆栈),则会收到相同的警告,因为代码将按预期返回或抛出异常(另一个if / else执行路径)。
只是重申一下,不要将try / catch块用于逻辑流。 catch块应用于优雅地处理异常/错误。 其次,任何未声明为void的函数都必须返回某种形式的声明类型,在您的情况下为布尔值。
可能的解决方案
private static boolean isTransientField(String name, Class beanClass)
{
try
{
Field field = beanClass.getDeclaredField(name);
if((field.getModifiers() & Modifier.TRANSIENT) == Modifier.TRANSIENT)
{
return true;
}
else
{
return false;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.