在Java中,大多数方法都是虚方法。在调用站点,可以根据对象调用不同的实际方法。这是动态调度。
问题:我们可以静态获取呼叫网站的目标数量吗?例如,来自字节码。
仅供参考:“virtual method”的答案有一个简单的动态调度示例。
答案 0 :(得分:2)
给定呼叫站点的目标是每个类,它是目标类型的子类型。 (我在这里使用“子类型”作为“小于或等于”的关系,如instanceof
)。这意味着你基本上都在问同样的问题:
How do you find all subclasses of a given class in Java?
答案是没有一种简单的方法可以做到这一点。您基本上只需要枚举所有可能的类并测试子类型关系。
如果你真的想用它做一些静态分析,你可以构建具有所有类层次结构关系的数据结构,这样你就可以在大量的调用站点上进行更快的查找。