首页 文章

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

提问于
浏览
4

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

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

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

3 回答

  • 2

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

  • 0
  • 3

    在我的研究期间,我还找到了以下链接,我想分享:

    JSR 292 Cookbook

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

相关问题