获取调用方法的注释值

时间:2014-11-11 13:17:50

标签: java annotations

我想从调用另一个方法的方法获取注释中的值,并且需要与调用方法中使用的注释一起使用。

实施例

@MyAnnotation(id="method-invoker")
public void invoker(){
     executor();
}

@ChildMethod
public void executor(){
}

在上面的示例中,我想在处理id注释时在@MyAnnotation的{​​{1}}字段中设置值。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

首先,您必须获取堆栈跟踪,然后从中提取调用者的名称,然后获取Method并获取其注释:

String id = getClass().getMethod(new Throwable().getStackTrace()[1].getMethodName()).getAnnotation(MyAnnotation.class).id();

(显然,在一行中按顺序执行如此多的调用是一种不好的风格,但例如可以。)

但这种方法有限。它不支持方法重载。例如,如果您有两个名为invoker()的方法在一个类中具有不同的签名,则无法使用纯反射API区分它们。

幸运的是,我实现了名为CallStack的库,可以执行此操作:https://github.com/alexradzin/callstack

使用CallStack,您可以说:

CallStack.getCallStack().getFunction().getAnnotation(MyAnnotation.class).id()