LocalVariableTableParameterNameDiscoverer
Spring提供的一个工具类,可以获取到执行函数的形参变量名 。 原理是通过ASM操作字节码获取方法的参数名称
import java.lang.reflect.Method;
import java.util.Arrays;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
public class Main {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
LocalVariableTableParameterNameDiscoverer localVariableTableParameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
//目标方法对象
Method method = Main.class.getMethod("main", String[].class);
String[] names = localVariableTableParameterNameDiscoverer.getParameterNames(method);
//localVariableTableParameterNameDiscoverer.getParameterNames(Constructor<?> constructor); 还可以获取构造器的参数名称
System.out.println(Arrays.asList(names)); //[args]
}
}
Java8之后,提供了保留方法参数名的机制,以及新的反射API Parameter
注意,必须添加编译参数
-parameters
告诉编译器保留参数名称信息
javac -parameters Main.java
import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class Main {
public static void main(String[] args) throws Exception {
Method method = Main.class.getMethod("foo", String.class);
Parameter[] parameters = method.getParameters();
//参数的描述对象
Parameter parameter = parameters[0];
String name = parameter.getName();
System.out.println(name); //filePath
}
public static void foo(String filePath) throws IOException {}
}