java反射获取方法的参数名

java反射获取方法的参数名

从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>
 </plugin>

Idea配置开启parameters

  1. File->Settings->Build,Execution,Deployment->Compiler->Java Compiler

  2. 在 Additional command line parameters: 后面填上 -parameters

  3. 填好后,再将项目重新build一下,Build->Rebuild Project。

  4. jdk版本必须是1.8
    在这里插入图片描述

Eclipse配置开启parameters

Preferences->java->Compiler下勾选Store information about method parameters选项。

这样在使用eclipse编译java文件的时候就会将参数名称编译到class文件中。
在这里插入图片描述

  • 拓展思考
    spring mvc 与mybatis 的参数绑定是如何实现的?