赞
踩
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());
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。