在Java中,大多数方法都是虚方法。在调用站点,可以根据对象调用不同的实际方法。这就是动态调度。
问题:我们能否静态获取调用站点的目标数量?例如,来自字节码。
仅供引用:“virtual method”的答案有一个动态调度的简单示例。
最佳答案
给定调用站点的目标将是作为目标类型的子类型的每个类。 (我在这里使用“子类型”作为“小于或等于”关系,例如 instanceof
)。这意味着您本质上是在问同样的问题:
How do you find all subclasses of a given class in Java?
答案是没有简单的方法可以做到这一点。您基本上只需枚举所有可能的类并测试子类型关系。
如果您确实想对此进行某种静态分析,您可以构建具有所有类层次结构关系的数据结构,以便您可以对大量调用站点进行更快的查找。
关于java - 如何获取调用站点可能目标的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17605058/