考虑以下class
:
@ClassAnnotation1
@ClassAnnotation2
class MyClass {
// ...
@MethodAnnotation1
@MethodAnnotation2
private void myMethod(@ParamAnnotation1 @ParamAnnotation2 int i) {
// ...
}
}
在我的应用程序的反思阶段,我需要在给定Method
实例的情况下分析各种代码方面。
public void analyze(final Method method) {
// do the analysis...
// for example here, method is an instance of myMethod in MyClass
}
我可以轻松分析参数' Annotation
做
for (Parameter p : method.getParameters()) {
if (p.getAnnotation(ParamAnnotation1.class) != null) {
// ...
}
}
并得到我期望的结果。
方法的Annotation
可以轻松处理
method.getAnnotation(MethodAnnotation1.class)
不幸的是,我未能获得类'的预期结果。 Annotation
' S
事实上,呼吁
method.getClass().getAnnotation(ClassAnnotation1.class)`
返回null
,而MyClass
明确注明@ClassAnnotation1
。
如何从MyClass
实例获取Method
注释?
答案 0 :(得分:1)
您必须使用method.getDeclaringClass().getAnnotation(ClassAnnotation1.class)
method.getParameters()
返回方法的参数的事实可能误导您认为method.getClass()
返回包含您的类方法
Method::getClass()
实际上会返回Class<? extends Method>
,@ClassAnnotation1
显然没有注释。这就是你获得null