什么是invokedynamic,如何使用它?

我一直听到所有正在添加到JVM中的新酷function,其中一个很酷的function是invokedynamic。 我想知道它是什么,以及它如何使Java中的reflection编程更容易或更好?

这是一个新的JVM指令,允许编译器生成调用比以前更宽松的规范的代码 – 如果您知道“ duck typing ”是什么,invokedynamic基本上允许鸭子打字。 Java程序员可以做的事情并不多, 如果您是工具创build者,则可以使用它来构build更灵活,更高效的基于JVM的语言。 这里是一个非常甜蜜的博客文章,提供了很多细节。

前段时间,C#在C#中增加了一个很酷的function,dynamic语法

 Object obj = ...; // no static type available dynamic duck = obj; duck.quack(); // or any method. no compiler checking. 

把它看作是用于reflection方法调用的语法糖。 它可以有非常有趣的应用程序。 见http://www.infoq.com/presentations/Statically-Dynamic-Typing-Neal-Gafter

谁负责C#的dynamictypes的Neal Gafter刚从SUN跳到MS。 因此,认为在SUN内部讨论过相同的事情并不是不合理的。

我记得不久之后,一些Java兄弟宣布了类似的东西

 InvokeDynamic duck = obj; duck.quack(); 

不幸的是,这个function在Java 7中找不到。非常失望。 对于Java程序员来说,他们没有简单的方法来在程序中利用invokedynamic