增加调试参数

在调用 javac 命令时,添加 -g 参数,即告诉编译器增加调试信息。生成的字节码中就会包含局部变量表的信息,于是可以通过解析字节码获取参数名了。
那么如何在方法运行的时候从字节码中获取参数名称呢?可行的方法是利用 ASM 字节码工具帮我们获取。

注意:-g 参数对接口和抽象类无效,因此不能正确解析参数名。

maven 插件

通过 maven 插件自动添加 -parameters 参数:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <version>3.8.0</version>
  7. <configuration>
  8. <source>${java.version}</source>
  9. <target>${java.version}</target>
  10. <parameters>true</parameters>
  11. </configuration>
  12. </plugin>
  13. </plugins>
  14. </build>

如果是 springboot 项目会更加方便,自动添加了这个插件以及 -parameters 参数。
然后通过反射直接拿到参数信息。

  1. HelloWorld.class.getMethod("main",String[].class).getParameters()[0].getName()

注意:JDK 必须是 1.8 以上。