在java中获取方法或构造函数参数的注释对象

时间:2012-05-08 17:56:47

标签: java reflection parameters annotations

我正在使用Scannotation来扫描类文件,并获取该类的任何元素上都带有注释的所有类。使用反射我已经能够找到方法中参数的所有注释,但我需要这些注释的对象,以便我以后可以得到它的参数(或者你怎么称呼它)。

这是我的代码的一小部分,它将返回我想要的注释,但我无法使用它们。

    public Set<Class> getParametersAnnotatedBy(Class<? extends Annotation> annotation) {
        for (String s : annotated) { 
        //annotated is set containing names of annotated classes
                    clazz = Class.forName(s); 
                    for (Method m : clazz.getDeclaredMethods()) {
                        int i = 0;
                        Class[] params = m.getParameterTypes();
                        for (Annotation[] ann : m.getParameterAnnotations()) {
                            for (Annotation a : ann) {
                                if (annotation.getClass().isInstance(a.getClass())) {
                                    parameters.add(a.getClass());
                                    //here i add annotation to a set
                                }
                            }
                        }
                    }
                }
            }

我知道我可以使用它,如果我知道注释,就像这样:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    public String name();
    public int count();
}
// ... some code to get annotations
MyAnnotation ann = (MyAnnotation) someAnnotation;
System.out.println(ann.name());
System.out.println(ann.count());

但到目前为止,我无法用这种方式做到这一点,使用反射...我非常感谢任何方向,提前谢谢。 PS。:有没有办法获取参数的对象,如Field for Fields,Method for methods等?

1 个答案:

答案 0 :(得分:1)

您需要使用a.annotationType。当您在注释上调用getClass时,您实际上正在获取其Proxy Class。要获得真正的课程,您需要拨打annotationType而不是getClass

if (annotation.getClass() == a.annotationType()) {
            parameters.add(a.annotationType());
            // here i add annotation to a set
        }