java中,获取参数名

2017-10-19  本文已影响139人  027f63d16800

java中,将类文件编译成字节码时,低版本的jdk并不会将函数的参数名编译进去,而高版本的则是可选项
因此,当要实现获取函数参数名的这样的需求时,就需要采用一些曲线救国的方法了。
jdk1.5开始,java引入了annotation,我们可以通过annotation来实现获取函数参数名。
首先,声明一个annotation

@Retention(RetentionPolicy.RUNTIME)  //指定运行时保留
@Target(ElementType.PARAMETER)     //目标为参数
@Documented                                         
public @interface Anno {
    String value() ;
}

然后,在声明一个方法时,使用该annotation来注解所有的参数名:

public String foo(@Anno("p1") String p1, String p2, @Anno("p3") String p3) {
        return null;
    }

最后,实现一个注解处理器来获取参数名:

   Class javaBeanClazz = Class.forName("JavaBean");
        Method fooMethod = javaBeanClazz.getDeclaredMethod("foo", String.class, String.class, String.class);
        Annotation[][] annos = fooMethod.getParameterAnnotations();
        for (Annotation[] as : annos) {
            for (Annotation a : as) {
                if (a instanceof Anno) {
                    System.out.println(((Anno) a).value());
                }
            }
        }
上一篇 下一篇

猜你喜欢

热点阅读