This question already has answers here:
Can I obtain method parameter name using Java reflection?

(15个答案)


7年前关闭。




我需要在运行时获取方法的参数名称。有什么办法可以做到这一点?

我尝试使用LocalVariableTableParameterNameDiscoverer这是一个Spring类。但是它仅适用于类而不适用于接口(interface)。

最佳答案

获取参数名称的唯一方法是使用-g:vars选项编译源代码。这将在类文件中生成LocalVariableTable属性。通常将其删除以进行优化。

例如:(taken from here)

public class Example {
   public int plus(int a){
     int b = 1;
     return a + b;
   }
 }

这将创建一个LocalVariableTable,如下所示

LocalVariableTable:
   Start  Length  Slot  Name     Signature
   0      6       0     this     LExample;
   0      6       1     a        I
   2      4       2     b        I

可以使用任何字节码检测库(如ASMJavassist)读取LocalVariableTable

10-06 02:04