【发布时间】:2019-02-11 23:13:08
【问题描述】:
是否可以使用反射来识别特定 java 类中的某些方法是否在构建时调用另一个方法?
假设我有
- 声明methodA1()的ClassA
- 声明methodB1()、methodB2()、methodB3()的ClassB
我想知道,在构建时,ClassB 的任何成员是否调用了 methodA1()。这可能吗?
我现在正在使用 JDK8。
我很惊讶我找不到这个问题,这让我觉得它很幼稚。
谢谢!
【问题讨论】:
-
你想在运行时知道这个,还是编译时知道?
-
对不起,我在运行时需要这个,而不是编译时。我将它用于许多使用共享包的库中的一些自动化文档。我会更新问题。
-
您是否需要在不实际致电
methodB1的情况下知道这一点?间接调用(methodA -> methodC -> methodB)怎么样? -
你在运行时需要什么?可以在构建时生成文档,不是吗?考虑到间接调用、动态调度、反射和不可判定性问题,我认为这在一般情况下是不可能的。最好的选择可能是静态分析工具(例如在 IDE 中用于检测调用图或用于混淆器)。
-
您可能会发现我的回答在这里很有帮助:stackoverflow.com/a/51886800/1270000 我的回答确实谈到了在编译时使用它,但您可以在运行时轻松找到此信息。还可以考虑切换到 Java9 或更高版本,您可以使用堆栈遍历 api 来查找此信息:stackoverflow.com/questions/421280/…
标签: java reflection