我们可以通过方法 java.lang.reflect.Executable.getParameters() 获得任意方法或构造器的参数名列表。
默认情况下,Java .class文件不存储参数名称。
要将参数名称存储在特定的.class文件中,从而使Reflection API能够检索参数名称,我们需要使用javac编译器的-parameters选项编译源文件。
例
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class Task {
public void execute(int num, String message) {
}
public static void main(String[] args) throws NoSuchMethodException {
Method m = Task.class.getDeclaredMethod("execute", int.class, String.class);
for (Parameter p : m.getParameters()) {
System.out.printf("name: %s, type: %s%n", p.getName(), p.getType());
}
}
}
不带-parameters选项进行编译
D:\examples>javac Task.java
D:\examples>java Task
name: arg0, type: int
name: arg1, type: class java.lang.String
使用-parameters选项进行编译
D:\examples>javac -parameters Task.java
D:\examples>java Task
name: num, type: int
name: message, type: class java.lang.String
在pom.xml中指定-parameters以进行Maven构建
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>10</source>
<target>10</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>