java – InvokeDynamic – 如何在bootstrap方法中访问参数?

我试图在JVM7中使用invokedynamic实现“duck typing”.我创建了两个不同的类,它们都有方法greet()返回String.我在其中一个之间随机选择,将实例存储在堆栈上并调用invokedynamic(使用ASM).

我想知道我是否可以在bootstrap方法中访问参数.因为我无法在不知道哪个对象在堆栈中以及应该返回哪个greet()方法的情况下返回适当的CallSite与目标.

如果我的方法有误,那么正确的方法是什么?

最佳答案 我会自己回答.

>使用您自己的静态方法绑定CallSite(例如lookup(CallSite cs,Object [] args)
> args [0]是接收者,其余的是参数.在查找方法中执行任何操作.

如果您对Inline Caching(我是)感兴趣,请查看以下两个链接:

> JSR 292 Cookbook presenteation
> JSR 292 – Cascaded inlining Cache Source Code

点赞