方法参数注释访问

时间:2012-11-10 19:26:23

标签: java reflection annotations

我花了一段时间才发现我在注释我的方法参数时没有犯错误。
但是我仍然不确定为什么,在下面的代码示例中,没有。 1不起作用:

import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;

public class AnnotationTest {

    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation {
        String name() default "";
        }

    public void myMethod(@MyAnnotation(name = "test") String st) {

    }

    public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        Class<AnnotationTest> clazz = AnnotationTest.class;
        Method method = clazz.getMethod("myMethod", String.class);

        /* Way no. 1 does not work*/
        Class<?> c1 = method.getParameterTypes()[0];
        MyAnnotation myAnnotation = c1.getAnnotation(MyAnnotation.class);
        System.out.println("1) " + method.getName() + ":" + myAnnotation);

        /* Way no. 2 works */
        Annotation[][] paramAnnotations = method.getParameterAnnotations();
        System.out.println("2) " + method.getName() + ":" + paramAnnotations[0][0]);
    }

}

输出:

    1) myMethod:null
    2) myMethod:@AnnotationTest$MyAnnotation(name=test)

它只是Java中注释实现的一个缺陷吗? 或者,Method.getParameterTypes()返回的类数组是否存在参数注释的逻辑原因是什么?

1 个答案:

答案 0 :(得分:4)

这不是实施中的缺陷。

Method#getParameterTypes()的调用会返回参数类型的数组,这意味着它们的类。当您获得该类的注释时,您将获得注释String而不是方法参数本身,而String没有注释(view source)。