我花了一段时间才发现我在注释我的方法参数时没有犯错误。
但是我仍然不确定为什么,在下面的代码示例中,没有。 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()
返回的类数组是否存在参数注释的逻辑原因是什么?
答案 0 :(得分:4)
这不是实施中的缺陷。
对Method#getParameterTypes()
的调用会返回参数类型的数组,这意味着它们的类。当您获得该类的注释时,您将获得注释String
而不是方法参数本身,而String
没有注释(view source)。