- 所有超接口:
-
ConstantDesc
- 所有已知子接口:
-
DirectMethodHandleDesc
public sealed interface MethodHandleDesc extends ConstantDesc permits DirectMethodHandleDesc (not exhaustive)
一个名义描述符,用于描述一个
MethodHandle常量。
- 自 JDK 版本:
- 12
-
Method Summary
Modifier and TypeMethodDescriptiondefault MethodHandleDescasType(MethodTypeDesc type) 返回一个描述此方法句柄适应不同类型的MethodHandleDesc,就好像通过MethodHandle.asType(MethodType)一样。boolean将指定对象与此描述符进行比较以确定是否相等。返回一个描述由此名义描述符描述的方法句柄的调用类型的MethodTypeDesc。static DirectMethodHandleDescof(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String name, String lookupDescriptor) 创建一个对已声明方法的调用、构造函数的调用或字段访问的MethodHandleDesc。static DirectMethodHandleDescofConstructor(ClassDesc owner, ClassDesc... paramTypes) 返回一个对构造函数的调用对应的MethodHandleDesc。static DirectMethodHandleDescofField(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String fieldName, ClassDesc fieldType) 创建一个对访问字段的方法句柄对应的MethodHandleDesc。static DirectMethodHandleDescofMethod(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String name, MethodTypeDesc lookupMethodType) 创建一个对已声明方法或构造函数的调用对应的MethodHandleDesc。
-
Method Details
-
of
static DirectMethodHandleDesc of(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String name, String lookupDescriptor) 创建一个对已声明方法的调用、构造函数的调用或字段访问的MethodHandleDesc。查找描述符字符串的格式与
CONSTANT_MethodHandle_info的各种变体以及MethodHandles.Lookup上的查找方法的格式相同。对于方法或构造函数调用,它被解释为方法类型描述符;对于字段访问,它被解释为字段描述符。如果kind是CONSTRUCTOR,则忽略name参数,并且查找描述符的返回类型必须为void。如果kind对应于虚拟方法调用,则查找类型包括方法参数但不包括接收者类型。- 参数:
-
kind- 要描述的方法句柄的类型 -
owner- 描述包含方法、构造函数或字段的类的ClassDesc -
name- 方法或字段的未限定名称(如果kind是CONSTRUCTOR则忽略) -
lookupDescriptor- 方法描述符字符串,如果请求是方法调用,则为查找类型,如果请求是字段或构造函数,则为描述调用类型 - 返回:
- MethodHandleDesc
- 抛出:
-
NullPointerException- 如果任何非忽略的参数为null -
IllegalArgumentException- 如果描述符字符串不是有效的方法或字段描述符 - 参见 Java 虚拟机规范:
-
4.4.8 CONSTANT_MethodHandle_info 结构
4.2.2 未限定名称
4.3.2 字段描述符
4.3.3 方法描述符
-
ofMethod
static DirectMethodHandleDesc ofMethod(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String name, MethodTypeDesc lookupMethodType) 创建一个对已声明方法或构造函数的调用对应的MethodHandleDesc。查找描述符字符串的格式与
MethodHandles.Lookup上的查找方法的格式相同。如果kind是CONSTRUCTOR,则忽略名称,并且查找类型的返回类型必须为void。如果kind对应于虚拟方法调用,则查找类型包括方法参数但不包括接收者类型。- 参数:
-
kind- 要描述的方法句柄的类型;必须是SPECIAL, VIRTUAL, STATIC, INTERFACE_SPECIAL, INTERFACE_VIRTUAL, INTERFACE_STATIC, CONSTRUCTOR之一 -
owner- 描述包含方法或构造函数的类的ClassDesc -
name- 方法的未限定名称(如果kind是CONSTRUCTOR则忽略) -
lookupMethodType- 描述查找类型的MethodTypeDesc - 返回:
- MethodHandleDesc
- 抛出:
-
NullPointerException- 如果任何非忽略的参数为null -
IllegalArgumentException- 如果name格式不正确,或者kind无效 - 参见 Java 虚拟机规范:
-
4.2.2 未限定名称
-
ofField
static DirectMethodHandleDesc ofField(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String fieldName, ClassDesc fieldType) 创建一个对访问字段的方法句柄对应的MethodHandleDesc。- 参数:
-
kind- 要描述的方法句柄的类型;必须是GETTER、SETTER、STATIC_GETTER或STATIC_SETTER之一 -
owner- 描述包含字段的类的ClassDesc -
fieldName- 字段的未限定名称 -
fieldType- 描述字段类型的ClassDesc - 返回:
- MethodHandleDesc
- 抛出:
-
NullPointerException- 如果任何参数为null -
IllegalArgumentException- 如果kind不是有效值之一,或者字段名称无效 - 参见 Java 虚拟机规范:
-
4.2.2 未限定名称
-
ofConstructor
返回一个对构造函数的调用对应的MethodHandleDesc。- 参数:
-
owner- 描述包含构造函数的类的ClassDesc -
paramTypes- 描述构造函数参数类型的ClassDesc - 返回:
- MethodHandleDesc
- 抛出:
-
NullPointerException- 如果任何参数或其内容为null
-
asType
返回一个描述此方法句柄适应不同类型的MethodHandleDesc,就好像通过MethodHandle.asType(MethodType)一样。- 参数:
-
type- 描述新方法类型的MethodHandleDesc - 返回:
- 适应的方法句柄的MethodHandleDesc
- 抛出:
-
NullPointerException- 如果参数为null
-
invocationType
MethodTypeDesc invocationType()返回一个描述由此名义描述符描述的方法句柄的调用类型的MethodTypeDesc。调用类型描述调用消耗的完整堆栈值集(包括接收者,如果有)。- 返回:
- 描述方法句柄类型的MethodHandleDesc
-
resolveConstantDesc
从接口复制的描述:ConstantDesc- 指定者:
-
resolveConstantDesc在接口ConstantDesc - 参数:
-
lookup- 提供名称解析和访问控制上下文的MethodHandles.Lookup - 返回值:
- 已解析的常量值
- 抛出:
-
ReflectiveOperationException- 如果在解析过程中无法反射解析类、方法或字段
-
equals
将指定的对象与此描述符进行比较以确定是否相等。仅当指定的对象也是MethodHandleDesc,并且两者都编码了方法句柄的相同名义描述时,返回true。
-