- 所有超接口:
-
ConstantDesc
- 所有已知子接口:
-
DirectMethodHandleDesc
public sealed interface MethodHandleDesc extends ConstantDesc permits DirectMethodHandleDesc (not exhaustive)
一个名义描述符,用于描述一个
MethodHandle
常量。
- 自 JDK 版本:
- 12
-
Method Summary
Modifier and TypeMethodDescriptiondefault MethodHandleDesc
asType
(MethodTypeDesc type) 返回一个描述此方法句柄适应不同类型的MethodHandleDesc,就好像通过MethodHandle.asType(MethodType)
一样。boolean
将指定对象与此描述符进行比较以确定是否相等。返回一个描述由此名义描述符描述的方法句柄的调用类型的MethodTypeDesc
。static DirectMethodHandleDesc
of
(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String name, String lookupDescriptor) 创建一个对已声明方法的调用、构造函数的调用或字段访问的MethodHandleDesc。static DirectMethodHandleDesc
ofConstructor
(ClassDesc owner, ClassDesc... paramTypes) 返回一个对构造函数的调用对应的MethodHandleDesc。static DirectMethodHandleDesc
ofField
(DirectMethodHandleDesc.Kind kind, ClassDesc owner, String fieldName, ClassDesc fieldType) 创建一个对访问字段的方法句柄对应的MethodHandleDesc。static DirectMethodHandleDesc
ofMethod
(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
。
-