Java7中方法句柄的用途是什么?

4

我看到Java7中增加了一种名为方法处理器的新功能。它们在哪些场景下有用?


2
提供这个新事物的描述链接会很有帮助... - Keith Randall
2
请尝试访问http://www.java7developer.com/blog/?p=191(MethodHandle及其用法的一瞥)。 - MadProgrammer
MethodHandle 的 JavaDoc 看起来非常完整和详细。 - Art Licis
2
拜托,你可以做得比这个更好,蝙蝠侠。如果我们能在2秒钟内用谷歌找到链接,那么你也能。 - Stephen C
3个回答

7
随着JDK 7对JSR 292的支持,动态类型语言在JVM中应该比现在运行得更快。这种支持的关键部分是添加了一个新的Java字节码invokedynamic来进行方法调用,并伴随着一种新的链接机制,涉及到一个叫做方法句柄的新构造。这些特性使得动态类型语言的编译器实现者(即开发JRuby和Jython等语言编译器的人)能够生成在JVM中运行极快的字节码。
方法句柄是一种简单的java.dyn.MethodHandle类型的对象,它包含一个匿名的JVM方法引用。方法句柄可以像命名方法引用一样被调用。然而,它的独特之处在于它通过指针结构访问,而不是通过链接名称。

@MadProgrammer:Google真是太棒了,我想知道为什么OP没有使用它;另外,我非常害怕涉及Java 7特定代码,因为我对Java的未来毫不自信,现在它已经落到了Larry Ellison手中... 在我看来... - paulsm4
+1 for a reference to Google! - MadProgrammer

6

我认为这是一套先进的工具集。它的目标是替换反射,但有一些性能问题(速度可以更快或更慢,但不是一致地更快)。它的语法也有点繁琐。

Java 8 中将会引入闭包和头等方法引用的特性。MethodHandles 在其中扮演着很重要的角色,并使它们的使用/语法变得自然和集成化。即使在没有直接引用该类的情况下,您也将能够使用新的 java 语法,并且编译器将以无法通过反射实现的方式协助检查类型和异常抛出。我相信到 Java 8 发布时,其性能问题也将得到解决。


0
JDK 7 引入了一个新的角色到这个动态/运行时检查中,即方法句柄(即抽象类 java.dyn.MethodHandle 的子类)。方法句柄为我们提供了调用非公共方法的无限制能力,例如它可以通过能够访问它的类在非公共方法上形成。与使用反射 API 相比,访问检查是在创建方法句柄时执行而不是在每次调用方法时执行。
直接引用自一瞥MethodHandle及其使用
大约在那个点,我遇到了 seg-fault 错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接