欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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用的,
java获取方法的参数名称
因为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;
    }
}