7.6 变量处理和方法处理 7.6.1 Java9增强的MethodHandle
7.6 变量处理和方法处理
Java9
引入了一个新的VarHandle
类,并增强了原有的MethodHandle
类。通过这两个类,允许Java
像动态语言一样引用变量、引用方法,并调用它们。
7.6.1 Java9增强的MethodHandle
MethodHandle
为Java
增加了方法引用的功能,方法引用的概念有点类似于C的”函数指针”。这种方法引用是一种轻量级的引用方式,它不会检查方法的访问权限,也不管方法所属的类、实例方法或静态方法, MethodHandle
就是简单代表特定的方法,并可通过MethodHandle
来调用方法。
为了使用MethodHandle
,还涉及如下几个类。
类 | 描述 |
---|---|
MethodHandles |
MethodHandle 的工厂类,它提供了一系列静态方法用于获取MethodHandle 。 |
MethodHandles.Lookup |
Lookup 静态内部类也是MethodHandle 、 VarHandle 的工厂类,专门用于获取MethodHandle 和VarHandle 。 |
MethodType |
代表一个方法类型。 MethodType 根据方法的形参、返回值类型来确定方法类型下面程序示范了MethodHandle 的用法。 |
程序示例
下面程序示范了MethodHandle
的用法。
1 | import java.lang.invoke.*; |
程序使用MethodHandles.Look
对象根据类、方法名、方法类型来获取Methodhandle
对象。由于此处的方法名只是一个字符串,而该字符串可以来自于变量、配置文件等,这意味着通过MethodHandle
可以让Java
动态调用某个方法。