Java Tools & Commands Java
We can obtain the names of the parameters of any method or constructor with the method java.lang.reflect.Executable.getParameters().
The classes Method and Constructor extend the class Executable and therefore inherit the method Executable.getParameters().
By default Java .class files do not store parameter names.
To store parameter names in a particular .class file, and thus enable the Reflection API to retrieve parameter names, we need to compile the source file with the -parameters option of the javac compiler.
Example
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());
}
}
}
Compiling without -parameters option
D:\java-compile-parameter-names>javac Task.java
D:\java-compile-parameter-names>java Task name: arg0, type: int name: arg1, type: class java.lang.String
Compiling with -parameters option
D:\java-compile-parameter-names>javac -parameters Task.java
D:\java-compile-parameter-names>java Task name: num, type: int name: message, type: class java.lang.String
Specifying -parameters in pom.xml for maven build
.............
<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>
..........
|