1

在 LocalVariableTableParameterNameDiscoverer 的 JavaDoc http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/core/LocalVariableTableParameterNameDiscoverer.html

提到了以下行:

ParameterNameDiscover 的实现,它使用方法属性中的 LocalVariableTable 信息来发现参数名称。如果类文件是在没有调试信息的情况下编译的,则返回 null 。

我没有得到没有调试信息的编译的含义。

请解释是否有人对此有任何想法。

4

2 回答 2

1

为了允许调试,大多数编译器都有一个调试器友好标志。当设置该标志时,重新排序代码的优化不会完成,并且生成的可执行文件具有将机器代码链接回生成它的源代码行的信息。另一方面,可以使编译器创建一个调试不友好的可执行文件,其中所有这些都被删除,以便稍微加快程序速度。

您提到的类无法从名称中的类文件中获取参数名称已被编译器删除以节省空间。

于 2012-06-14T14:06:36.237 回答
0

为了节省空间,java 编译器避免写出方法参数名称等,请参阅this。但是要使 ParameterNameDiscover工作,它需要将方法参数信息打印到 .class 文件中,这可以通过在 java 8 之前使用-debug选项或 java 8 中的-parameter选项编译代码来完成。有关方法参数的更多信息在 .class 文件中看到这个 stackover问题。

于 2015-02-07T19:36:57.163 回答