Java 9 中 MethodHandles 类的重要性?
MethodHandles 类在Java 7版本中引入。此类主要添加了一些static 方法 以增强功能,并分为几类,如Lookup 方法 (帮助创建方法和字段的方法句柄)、Combinator 方法(将已有的方法句柄组合或转换成为新的方法句柄)以及factory 方法(创建方法句柄以模拟其他常见的 JVM 操作或控制流模式)。MethodHandles 类在 Java 9 中得到了增强,引入了许多更改并添加了新的静态方法,如 arrayLength()、arrayConstructor()、zero() 等。
语法
public class MethodHandles extends Object
示例
import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; public class MethodHandlesTest { public void MethodHandle1() { try { MethodHandle methodHandleLength = MethodHandles.arrayLength(int[].class); int[] array = new int[] {5, 10, 15, 20}; int arrayLength = (int) methodHandleLength.invoke(array); System.out.println("Length of Array using Method Handle is: " + arrayLength); MethodHandle methodHandleConstructor = MethodHandles.arrayConstructor(int[].class); int[] newArray = (int[]) methodHandleConstructor.invoke(3); System.out.println("Array Constructed using Method Handle of Size: " + newArray.length); int x = (int) MethodHandles.zero(int.class).invoke(); System.out.println("Default Value of Primitive Integer using Method Handles is: " + x); String y = (String) MethodHandles.zero(String.class).invoke(); System.out.println("Default Value of String using Method Handles is: " + y); } catch(Throwable e) { e.printStackTrace(); } } public static void main(String args[]) { new MethodHandlesTest().MethodHandle1(); } }
输出
Length of Array using Method Handle is: 4 Array Constructed using Method Handle of Size: 3 Default Value of Primitive Integer using Method Handles is: 0 Default Value of String using Method Handles is: null
广告