如何使用JDK7的invokedynamic实现多态性

时间:2011-10-18 15:27:57

标签: java dynamic polymorphism java-7

假设我在JVM 7上实现动态类型语言,它支持invokedynamic指令在运行时链接方法。

动态类型语言有一个函数add,它通过连接它们来处理整数,并通过连接它们来处理字符串。现在假设add由一个通用列表处理方法调用,该方法只知道(在编译时)它保存对象,整数或字符串或两者。

在将方法编译为JVM字节码时,invokedynamic如何帮助我,因为它必须调度到两个不同的内部函数,即添加整数的实际函数和连接字符串的实际函数?

3 个答案:

答案 0 :(得分:3)

简而言之,invokedynamic允许您在不知道方法所属的类的情况下调用具有给定签名的方法。如果您的add()方法只使用Object(或其他常见基类型)作为参数,那么您可以在许多其他不相关的类中使用add(Object)方法,invokedynamic将能够调用它们。只要目标对象具有该方法,就会调用它。

答案 1 :(得分:2)

答案 2 :(得分:0)

在我的研究过程中,我还找到了以下链接,我想分享一下:

JSR 292 Cookbook

它是一个源代码集合,展示了如何使用JSR 292实现在动态语言运行时中可以找到的常用模式。 (从页面复制说明。)