我使用paranamerer .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);
参数名是否来自某处?根据paramamer的文档,它使用几种方法来获取参数名:
- 通过
__PARANAMER_DATA
字段。显然,只有当你的类有这样一个字段时,这才有效。 - 通过
.class
文件中的调试信息。显然,这只适用于使用调试信息编译类的情况。 - 通过
@Named
标注。显然,这只有在方法参数包含这样的注释时才有效。
如果这些都不适用于你的类,那么很抱歉,参数名将不可用。
使用
Paranamer paranamer = new AdaptiveParanamer();
而不是这样的:
Paranamer paranamer = new CachingParanamer();
如果还没有工作,告诉我,因为我也有麻烦与paranamer -在巴西朋友的帮助下,我已经学会了它是如何工作的。再见!
保留编译时的调试信息
如果你正在用eclipse编译,那么在project-properties-java compiler
中勾选选项keep debug information如果你用javac编译,添加-g选项
和在你的代码中使用Paranamer Paranamer = new AdaptiveParanamer();