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的编译插件中增加参数配置-parameters

<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
  1. File->Settings->Build,Execution,Deployment->Compiler->Java Compiler
  2. 在 Additional command line parameters: 后面填上 -parameters
  3. 填好后,再将项目重新build一下,Build->Rebuild Project。
Eclipse配置开启parameters
Preferences->java->Compiler下勾选Store information about method parameters选项。

  这样在使用eclipse编译java文件的时候就会将参数名称编译到class文件中。