如何在编译Java时保留方法参数名
在Java 8之前的版本,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,参数名会变成arg0、arg1….。而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来了极大的遍历。
如果需要保留方法参数名,在编译时,可以启用 -parameters
选项,默认情况下此选项是关闭的。
本文将介绍编译Java源代码时,如何在maven, eclipse, idea中启用 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
选项时,编译并运行。
$ javac Task.java $ java Task name: arg0, type: int name: arg1, type: class java.lang.String
开启 -parameters
选项时,编译并运行。
$ javac -parameters Task.java $ java Task name: num, type: int name: message, type: class java.lang.String
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> ..........
Eclipse设置
Preferences
-> java
-> Compiler
下勾选 Store information about method parameters
选项。
Idea设置
File
-> Settings
-> Build,Execution,Deployment
-> Java Compiler
下的 Additional command line parameters
选项中添加 -parameters
。