假设我在JVM 7上实现动态类型语言,它支持invokedynamic指令以在运行时链接方法.
动态类型语言有一个函数add,它通过连接它们在整数上运行,并通过连接它们在字符串上运行.现在假设add是由一个通用列表处理方法调用的,它只知道(在编译时)它保存对象,整数或字符串或两者.
在将方法编译为JVM字节码时,invokedynamic如何帮助我,因为它必须调度到两个不同的内部函数,即添加整数的实际函数和连接字符串的实际函数?
解决方法:
简而言之,invokedynamic允许您在不知道方法所属的类的情况下调用具有给定签名的方法.如果你的add()方法只是将一个Object(或其他常见的基类型)作为参数,那么你可以在许多其他不相关的类中使用add(Object)方法,并且invokedynamic将能够调用它们.只要目标对象具有该方法,就会调用它.