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

时间:2012-07-30 06:04:18

标签: java

我看到在Java7中添加了一个名为方法处理程序的新东西。他们对什么情况有用?

3 个答案:

答案 0 :(得分:7)

  

http://www.oracle.com/technetwork/articles/javase/index-136358.html

     

在JDK 7中增加了对JSR 292的支持,动态输入   语言在JVM中的运行速度应该比现在快。关键部分   这种支持是添加一个新的Java字节码,invokedynamic,   用于方法调用,以及随附的链接机制   涉及一个称为方法句柄的新构造。这些功能启用   动态类型语言的编译器实现者,即   为JRuby和Linux等语言开发编译器的人   Jython,用于生成在JVM中运行速度极快的字节码。

     

...

     

方法句柄是java.dyn.MethodHandle类型的简单对象   包含对JVM方法的匿名引用。方法句柄是   可调用就像对方法的命名引用一样。是什么造就的   然而,唯一的是它是通过指针结构访问的,   而不是链接名称。

答案 1 :(得分:6)

恕我直言,这是一个超前的工具集。它打算替换反射,但有一些性能问题(它可以更快或更慢,但不是更快一点)它synatx也有点麻烦。

Java 8中的内容是闭包和一流的方法引用。 MethodHandles将在这方面发挥重要作用,并使其使用/语法自然和集成。即,你将能够使用新的java语法,而不必直接引用这个类,编译器将帮助检查类型和异常抛出,它现在无法用反射。我认为,当Java 8发布时,其性能问题也将得到解决。

答案 2 :(得分:0)

  

JDK 7为此动态/运行时检查引入了一个新的播放器,方法句柄(即抽象类java.dyn.MethodHandle的子类)。方法句柄为我们提供了无限制的调用非公共方法的功能,例如:它可以由一个可以访问它的类在非公共方法上形成。与使用Reflection API相比,创建方法句柄时执行访问检查,而不是每次调用方法时都执行访问检查。

直接来自A glimpse at MethodHandle and its usage

大约在那一点上我发生了故障