Java反射获取方法的参数名
Parameter类
从JDK8开始,反射类添加了Parameter,通过Parameter类,我们可以从.class编译后的文件中获取方法上参数名。
获取参数名的方法:Parameter.getName()
示例:
public static List<String> getParameterNameJava8(Class clazz, String methodName) {
List<String> paramterList = new ArrayList<>();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if (methodName.equals(method.getName())) {
//直接通过method就能拿到所有的参数
Parameter[] params = method.getParameters();
for (Parameter parameter : params) {
paramterList.add(parameter.getName());
}
}
}
return paramterList;
}
开启javac编译.class文件保留参数名
默认情况下,JDK8的javac编译后的.class文件是不保留方法的参数名,参数名是以arg0,arg1,arg3…表示。
如果要保留参数名,需要给javac添加参数-parameters开启。
Maven配置开启parameters
在pom.xml的编译插件中增加参数配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
Idea配置开启parameters
- File->Settings->Build,Execution,Deployment->Compiler->Java Compiler
- 在 Additional command line parameters: 后面填上 -parameters
- 填好后,再将项目重新build一下,Build->Rebuild Project。
Eclipse配置开启parameters
Preferences->java->Compiler下勾选Store information about method parameters选项。
这样在使用eclipse编译java文件的时候就会将参数名称编译到class文件中。