为什么Method的getAnnotation方法需要class作为参数?

时间:2016-03-25 08:58:28

标签: java annotations

我正在阅读注释,无法理解为什么getAnnotation Method需要类作为参数。请考虑以下代码:

Class<?> c = ob.getClass();//From here we get the Class object
Method m = c.getMethod("myMeth");//we get Method object (we know from what Class)
MyAnno anno = m.getAnnotation(MyAnno.class);//and here we pass Class. Why?

2 个答案:

答案 0 :(得分:1)

如果您只想获得所有方法注释,请使用:

Annotation[] annotations = method.getDeclaredAnnotations();

如果在方法上声明了,那么样本中的getAnnotation方法将返回fiven类型的注释

答案 1 :(得分:1)

这是因为一个方法可能有多个可能有多种类型的注释。

getAnnotation(annotationClass)将要检索的所需注释的类作为参数:

  

如果存在这样的注释,则返回指定类型的此元素的注释,否则为null。

如果您没有提供想要的课程,则无法知道要返回哪个注释。考虑

@MyAnnotation1(value = "a") @MyAnnotation2(value = "b")
public void foo() { }

如果你想要注释value的{​​{1}},你需要以某种方式告诉你要为方法MyAnnotation1检索哪个注释:有2.这是通过给出来完成的注释的类。

另一方面,如果要检索方法上的所有注释,可以调用getDeclaredAnnotations()(使注释直接出现在方法上)或{{3} (具有直接和继承的注释)。