增加调试参数
在调用 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 以上。
