Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取调用方法的注释值_Java_Annotations - Fatal编程技术网

Java 获取调用方法的注释值

Java 获取调用方法的注释值,java,annotations,Java,Annotations,我想从调用另一个方法的方法中获取注释中的值,该值需要与被调用方法中使用的注释一起使用 范例 @MyAnnotation(id="method-invoker") public void invoker(){ executor(); } @ChildMethod public void executor(){ } 在上面的示例中,我希望在处理@ChildMethod注释时,在@MyAnnotation中的id字段中设置值 如何执行此操作?首先必须获取堆栈跟踪,然后从中提取调用方的名称

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

范例

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

@ChildMethod
public void executor(){
}
在上面的示例中,我希望在处理
@ChildMethod
注释时,在
@MyAnnotation
中的
id
字段中设置值


如何执行此操作?

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

String id = getClass().getMethod(new Throwable().getStackTrace()[1].getMethodName()).getAnnotation(MyAnnotation.class).id();
(显然,在一行中顺序执行如此多的调用是一种不好的风格,但例如,它是可以的)

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

幸运的是,我实现了一个名为CallStack的库,它可以做到这一点:

使用
CallStack
可以说:

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

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

String id = getClass().getMethod(new Throwable().getStackTrace()[1].getMethodName()).getAnnotation(MyAnnotation.class).id();
(显然,在一行中顺序执行如此多的调用是一种不好的风格,但例如,它是可以的)

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

幸运的是,我实现了一个名为CallStack的库,它可以做到这一点:

使用
CallStack
可以说:

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