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());
}
}
}
网友评论