如何获得呼叫站点上可能的目标数量?

时间:2013-07-11 23:10:51

标签: java methods jvm virtual-method dynamic-dispatch

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

问题:我们可以静态获取呼叫网站的目标数量吗?例如,来自字节码。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

如果你真的想用它做一些静态分析,你可以构建具有所有类层次结构关系的数据结构,这样你就可以在大量的调用站点上进行更快的查找。