java - 如何获取调用站点可能目标的数量?

标签 java methods jvm virtual-functions dynamic-dispatch

在Java中,大多数方法都是虚方法。在调用站点,可以根据对象调用不同的实际方法。这就是动态调度。

问题:我们能否静态获取调用站点的目标数量?例如,来自字节码。

仅供引用:“virtual method”的答案有一个动态调度的简单示例。

最佳答案

给定调用站点的目标将是作为目标类型的子类型的每个类。 (我在这里使用“子类型”作为“小于或等于”关系,例如 instanceof)。这意味着您本质上是在问同样的问题:

How do you find all subclasses of a given class in Java?

答案是没有简单的方法可以做到这一点。您基本上只需枚举所有可能的类并测试子类型关系。

如果您确实想对此进行某种静态分析,您可以构建具有所有类层次结构关系的数据结构,以便您可以对大量调用站点进行更快的查找。

关于java - 如何获取调用站点可能目标的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17605058/

相关文章:

java - `foo()` 和 `foo(void)` 之间的区别

java - jvm - 关于代码缓存区

java - 使用比较方法的可比较接口(interface)

java - Guice中的嵌套注释方法拦截

java - 显式等待 PageFactory @Findby

php - 如何单独显示SQL结果

java - 从 Bat 文件执行 Java 时包含 Jar

java - 用 for 循环替换 if 语句 (Java)

java - 如何创建自定义 JVM 启动器?

java - JVM会把编译后的字节码变成可执行文件吗