在LocalVariableTableParameterNameDiscoverer http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/core/LocalVariableTableParameterNameDiscoverer.html的JavaDoc中
提到以下内容:
ParameterNameDiscover的实现,它使用方法属性中的LocalVariableTable信息来发现参数名称。如果在没有调试信息的情况下编译类文件,则返回null。
如果没有调试信息,我没有得到编译的含义。
请解释是否有人对此有所了解。
答案 0 :(得分:1)
为了允许调试,大多数编译器都有一个调试器友好标志。设置标志后,不会执行重新排序代码的优化,并且生成的可执行文件具有将机器代码链接回生成源代码行的信息。另一方面,编译器可以创建一个调试不友好的可执行文件,其中所有这些都被删除,以便加快程序的速度。
您提到的类无法从名称中的类文件中获取参数名称,编译器将其删除以节省空间。
答案 1 :(得分:0)
为节省空间,java编译器避免写出方法参数名称等,请参阅this。但是要使 ParameterNameDiscover 工作,它需要打印到.class文件的方法参数信息,这可以通过在java 8之前使用 -debug 选项编译代码来实现。或者java 8中的 -parameter 选项。有关.class文件中方法参数的更多信息,请参阅this stackover问题。