如何从Method实例中获取类注释?

时间:2017-11-29 12:40:32

标签: java reflection

考虑以下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注释?

1 个答案:

答案 0 :(得分:1)

您必须使用method.getDeclaringClass().getAnnotation(ClassAnnotation1.class)

method.getParameters()返回方法的参数的事实可能误导您认为method.getClass()返回包含您的方法

Method::getClass()实际上会返回Class<? extends Method>@ClassAnnotation1显然没有注释。这就是你获得null

的原因