通过反射,可以获取到方法的参数类型,返回值类型,方法名称,这些大家应该都清楚,但是能够获取得到参数名称吗?在spring中,通常通过参数名称进行参数匹配并赋值。
在JDK1.7版本及以下,我们可以借助于Spring中的类LocalVariableTableParameterNameDiscoverer,来获取得到参数名称。需要注意的是,该方法似乎只对类的方法有效,针对接口的方法无效。
使用如下:
package com.company.test;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import java.lang.reflect.Method;
import java.util.Arrays;
public class MethodParameterName {
public void getInfo(String name, Integer age) {
}
public static void main(String[] args) {
LocalVariableTableParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();
Class<?> clazz = MethodParameterName.class;
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
System.out.println("方法名称:" + method.getName());
String[] parameterNames = discoverer.getParameterNames(method);
if (parameterNames != null) {
Arrays.asList(parameterNames).forEach(item -> System.out.println("方法参数名称:" + item));
}
}
}
}
如果是在JDK1.8,我们又多了一种方法,JDK1.8中新增了