2016-02-13 85 views
2

我在查看jstl 1.1.2的一些代码时遇到了一些不熟悉的Java语法。它发生在我看到的代码是由Beyond Compare(或其插件)反编译的,所以这可能与它有关。返回后的Java对象声明;?

在方法结束的代码如下所示:

... 
p.parse(page.getInputStream(), h); 
if(failed) 
    return vmFromString("taglib " + prefix + " (" + uri + ") allows only the " + 
    "following taglibs to be imported: " + permittedTaglibs); 
return null; 
SaxException ex; 
ex; 
return vmFromString(ex.toString()); 
ex; 
return vmFromString(ex.toString()); 
ex; 
return vmFromString(ex.toString()); 
} 

在JSTL 1.1,它们重构了PermittedTaglibsHandler之前,它看起来像这样:

... 
saxparser.parse(pagedata.getInputStream(), permittedtaglibshandler); 
if(failed) 
    return vmFromString("taglib " + s+ " (" + s1+ ") allows only the " + 
    "following taglibs to be imported: " + permittedTaglibs); 
return null; 
Object obj; 
obj; 
return vmFromString(((SaxException) (obj)).toString()); 
obj; 
return vmFromString(((ParserConfigurationException) (obj)).toString()); 
obj; 
return vmFromString(((IOException) (obj)).toString()); 
} 

这是奇怪的语法只是反向编译的人工产物,还是像返回语句之后的有意义的代码那样的东西?

感谢,

Rebeccah

+0

这个肯定是反编译的情况!在同一级别的函数中不能有多个返回。 –

+0

第二次返回无法到达。我假设前线;也是无用的。它应该给出一个编译错误,但你可以强制运行,它会正常工作,但第二次返回是无法访问的。 –

回答

1

的代码仅仅是定制,以处理多个异常的异常处理循环 - 因此多个return语句。它显然没有被正确地翻译成Java。