gpt4 book ai didi

Java 反射 : Find method usage in custom AbstractProcessor

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:51 25 4
gpt4 key购买 nike

我是反射(reflection)中的新手。有什么方法可以检测特定方法在哪里被调用?例如:

public class MyClass {

public static void method(){
//DO SOMETHING
}

}

public class Test {

public test(){
MyClass.method();
}

}

public class MyProcessor extends AbstractProcessor {

public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

Method method = MyClass.class.getDeclaredMethod("method");

Class classWhereMethodIsInvoked = obtainClassWhereMethodIsInvoked(method);

}

public Class obtainClassWhereMethodIsInvoked(Method method) {
//here I want to search one class that invoke that method, in this case Test.class
}

}

这样的事情是可能的还是我要疯了?

最佳答案

如评论中所述,Apache BCEL 适合您的问题。这些库通常特别用于从生成的字节码中确定方法使用和控制流分析等编译时信息,并且即使不是不可能,也很难使用反射检索这些信息。如果您使用 BCEL 解决方案,您可能不再需要自定义注释处理器。

但是由于您似乎已经在使用自定义注释处理器,所以它的全部意义在于能够处理源文件中的注释。因此,一种方法是定义一个自定义注释来标记正在调用的方法,并让自定义处理器读取这些注释以了解哪些类调用哪些方法:

@CallerClass("MyClass.method")
public class Test {

public test() {
MyClass.method();
}

}

在上面的(简单的)示例中,自定义 CallerClass 注释标记类调用括号内注释元素中指定的方法。注解处理器可以读取这个注解并构造调用者信息。

关于Java 反射 : Find method usage in custom AbstractProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com