java获取方法的参数名称
程序员文章站
2024-02-17 23:12:58
...
原来一直以为通过java的反射机制可以获取到类的任何信息。最近发现反射是无法获取方法的参数名称。但是有其他方式可以得到。
1.javassist:”Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态”AOP”框架。”—–某百科如是说。看了下网上的实现,这方式代码量多。自己研究下。。。
2.spring这么强大的框架当然已经实现。
ParameterNameDiscoverer 参数名称解析接口
public interface ParameterNameDiscoverer {
String[] getParameterNames(Method var1);
String[] getParameterNames(Constructor<?> var1);
}
它的实现类有:前面两个是给AOP用的,
因为java8可以通过反射获取参数名,但是需要使用-parameters参数开启这个功能
可以看到有两个(java8有这两个实现类,低于8没有找到)StandardReflectionParameterNameDiscoverer、LocalVariableTableParameterNameDiscoverer
一个是通过标准反射来获取,一个是通过解析字节码文件的本地变量表来获取的。
public class TestReflect implements TestReflectInterface{
public static void main(String[] args) throws NoSuchMethodException {
Class<TestReflect> clazz = TestReflect.class;
Method method = clazz.getMethod("getName",String.class,Integer.class);
ParameterNameDiscoverer pnd = new LocalVariableTableParameterNameDiscoverer();
String[] paramNames = pnd.getParameterNames(method);//返回的就是方法中的参数名列表了
System.out.println(Arrays.toString(paramNames));
}
public String getName(String name,Integer age){
return name + "=" + age;
}
}
上一篇: 全文搜索和替换_PHP