假设我在JVM 7上方实现动态键入语言,该语言支持 invokedynamic 在运行时链接方法的指令。

动态键入的语言具有函数 add 通过添加整数和串联来对其进行连接来对其进行连接。现在假设 add 由A调用A,例如,通用列表处理方法仅知道(在编译时)它保存对象,整数或字符串或两者兼而有之。

怎么能 invokedynamic 在编译JVM字节码的方法时,请在这里帮助我,因为它必须派遣到两个不同的内部函数,即添加整数的实际函数和串联字符串的实际函数?

有帮助吗?

解决方案

简而言之, invokedynamic 让您在不了解该方法所属的类的情况下调用具有给定签名的方法。如果你的 add() 方法只接受 Object (或其他公共基本类型)作为参数,那么您可以拥有 add(Object) 许多原本无关的类中的方法, invokedynamic 将能够调用它们。只要目标对象具有该方法,就会被调用。

其他提示

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

JSR 292食谱

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top