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

Java 如何获取呼叫站点上可能的目标数量?,java,methods,jvm,virtual-functions,dynamic-dispatch,Java,Methods,Jvm,Virtual Functions,Dynamic Dispatch,在Java中,大多数方法都是虚拟方法。在调用站点上,根据对象的不同,可以调用不同的实际方法。这是动态调度 问题:我们可以静态地获得呼叫站点的目标数量吗?例如,来自字节码 仅供参考:“”的答案有一个简单的动态分派示例。给定呼叫站点的目标将是作为目标类型的子类型的每个类。(我在这里使用“subtype”作为“小于或等于”关系,如instanceof)。这意味着你基本上在问同样的问题: 答案是没有一个简单的方法可以做到这一点。您基本上只需要枚举所有可能的类并测试子类型关系 如果你真的想用它做一些静态

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

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


仅供参考:“”的答案有一个简单的动态分派示例。

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

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


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

可能的调用目标的数量原则上是无限的,取决于实现/重写该方法的可用类的数量。出于好奇,你为什么对这样做感兴趣?