增加调试参数
在调用 javac 命令时,添加 -g 参数,即告诉编译器增加调试信息。生成的字节码中就会包含局部变量表的信息,于是可以通过解析字节码获取参数名了。
那么如何在方法运行的时候从字节码中获取参数名称呢?可行的方法是利用 ASM 字节码工具帮我们获取。
注意:-g 参数对接口和抽象类无效,因此不能正确解析参数名。
maven 插件
通过 maven 插件自动添加 -parameters
参数:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<parameters>true</parameters>
</configuration>
</plugin>
</plugins>
</build>
如果是 springboot 项目会更加方便,自动添加了这个插件以及 -parameters 参数。
然后通过反射直接拿到参数信息。
HelloWorld.class.getMethod("main",String[].class).getParameters()[0].getName()
注意:JDK 必须是 1.8 以上。