Paranamer不返回参数名称

时间:2013-06-20 01:35:50

标签: java reflection

我正在使用paranamer.jar来获取方法的参数名称。但它没有得到任何参数名称。

    Class c = Class.forName("com.soa1.MyClass");
    Class[] argTypes = { java.lang.String.class };
    Method method=ABC.class.getMethod("getData",argTypes);
Paranamer paranamer = new CachingParanamer();
    String[] parameterNames = paranamer.lookupParameterNames(method,false);

3 个答案:

答案 0 :(得分:3)

参数名称是否来自某处?根据ParaNamer的文档,它使用几种方法来获取参数名称:

  1. 通过__PARANAMER_DATA字段。显然,这只适用于你的班级有这样一个领域。
  2. 通过.class文件中的调试信息。显然,只有在使用调试信息编译您的类时,这才有效。
  3. 通过@Named注释。显然,这仅适用于方法参数包含此类注释的情况。
  4. 如果这些都不适用于您的班级,那么抱歉,参数名称将无法使用。

答案 1 :(得分:0)

使用此:

Paranamer paranamer = new AdaptiveParanamer();

取而代之的是:

Paranamer paranamer = new CachingParanamer();

如果还没有工作,请告诉我,因为我也遇到了paranamer的麻烦 - 在一位巴西朋友的帮助下,我已经了解了它是如何运作的。见啊!

答案 2 :(得分:0)

在编译时保留调试信息

如果您正在使用eclipse进行编译,请在project-properties-java compiler

中检查选项keep debug information

如果您使用javac add -g选项进行编译

并在您的代码中使用Paranamer paranamer = new AdaptiveParanamer();

相关问题