2.MethodHandle

2021-04-03  本文已影响0人  盗生一

Java7为间接调用方法引入了新的API。其中的关键是java.lang.invoke包,即方法句柄。你可以把它看做反射的现代化方式,但它不像反射API那样有时会显得冗长、繁重和粗糙。方法句柄是将invokedynamic引入JVM项目中的一部分.
MethodHandle api要比反射快很多因为访问检查在创建的时候就已经完成了,而不是像反射一样等到运行时候才检查
句柄:句柄是一种特殊的智能指针,用来唯一标识对象。

MethodHandle

JDK7为间接调用方法引入新的API,在java.lang.invoke包下,可以看作为反射的升级版,但它不像反射API那样显得冗长、繁重

主要的类

MethodHandle

方法句柄、对可直接执行的方法的类型化引用,能够安全调用方法的对象。
MethodHandle 是抽象类,无法直接实例化,需通过MethodHandles.Lookup的工厂方法来创建

MethodType

每个方法句柄都有一个MethodType实例,用来指明方法的返回类型和参数类型。

MethodHandles

这个类只包含返回方法句柄操作的静态方法。它们分为以下几类:

MethodHandles.Lookup

创建MethodHandle的工厂方法查找类

使用示例

唯一决定方法:在类中:方法名+参数类型+返回值类型


MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodType mt = MethodType.methodType(String.class, char.class, char.class);
MethodHandle mh = lookup.findVirtual(String.class, "replace", mt);
String s = (String) mh.invokeExact("daddy",'d','n');

上一篇 下一篇

猜你喜欢

热点阅读