1.使用JDK1.8的Parameter.getName()方法。
public String[] getParameterNames(Method method) {
Parameter[] parameters = method.getParameters();
String[] parameterNames = new String[parameters.length];
for (int i = 0; i < parameters.length; i++) {
Parameter param = parameters[i];
if (!param.isNamePresent()) {
return null;
}
parameterNames[i] = param.getName();
}
return parameterNames;
}
2.如果是JDK1.8以下的可以使用本地变量表的方式即 ASM library 字节码技术分析class文件,经过测试这种获取参数名称的方式有些消耗性能,会慢一点。可参考spring的org.springframework.core.LocalVariableTableParameterNameDiscoverer实现该功能。
使用spring的org.springframework.core.DefaultParameterNameDiscoverer这个类默认会去JDK中找如果是JDK1.8自动使用1.8的功能,没有的话使用字节码技术找。
Method method = null;
try {
method = ExpressionParser.class.getMethod("parseParams", String.class, Object[].class);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
//
MethodParameter param = new MethodParameter(method, 1);
param.initParameterNameDiscovery(new DefaultParameterNameDiscoverer());
System.out.println(param.getParameterName());
版权声明:本文为Melody_Susan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。