我想从调用另一个方法的方法获取注释中的值,并且需要与调用方法中使用的注释一起使用。
实施例
@MyAnnotation(id="method-invoker")
public void invoker(){
executor();
}
@ChildMethod
public void executor(){
}
在上面的示例中,我想在处理id
注释时在@MyAnnotation
的{{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()