假设我在JVM 7上实现动态类型语言,它支持invokedynamic
指令在运行时链接方法。
动态类型语言有一个函数add
,它通过连接它们来处理整数,并通过连接它们来处理字符串。现在假设add
由一个通用列表处理方法调用,该方法只知道(在编译时)它保存对象,整数或字符串或两者。
在将方法编译为JVM字节码时,invokedynamic
如何帮助我,因为它必须调度到两个不同的内部函数,即添加整数的实际函数和连接字符串的实际函数?
答案 0 :(得分:3)
简而言之,invokedynamic
允许您在不知道方法所属的类的情况下调用具有给定签名的方法。如果您的add()
方法只使用Object
(或其他常见基类型)作为参数,那么您可以在许多其他不相关的类中使用add(Object)
方法,invokedynamic
将能够调用它们。只要目标对象具有该方法,就会调用它。
答案 1 :(得分:2)
您也可以查看以下相关文章:
答案 2 :(得分:0)
在我的研究过程中,我还找到了以下链接,我想分享一下:
它是一个源代码集合,展示了如何使用JSR 292实现在动态语言运行时中可以找到的常用模式。 (从页面复制说明。)