java.lang.Object
jdk.dynalink.SecureLookupSupplier
jdk.dynalink.CallSiteDescriptor
调用站点描述符包含链接调用站点所需的所有信息。此信息通常作为参数传递给引导程序方法,包括发生调用点的调用者类上的
MethodHandles.Lookup 对象、调用点的动态操作以及调用点的方法类型。 CallSiteDescriptor 对象在 Dynalink 中用于捕获和存储这些参数以供 DynamicLinker 后续使用。
内置 RelinkableCallSite 实现的构造函数都采用调用站点描述符。
调用站点描述符必须是不可变的。您可以按原样使用此类,也可以将其子类化,特别是如果您需要向描述符添加更多信息(通常是将附加参数中的值传递给引导方法。由于描述符必须是不可变的,因此您可以设置一个缓存等效描述符,以便调用站点共享它们。
该类扩展了 SecureLookupSupplier ,以便对其携带的 MethodHandles.Lookup 对象进行安全检查访问。此查找应用于查找方法句柄以设置为此描述符所描述的调用站点的目标。
-
字段摘要
在类 jdk.dynalink.SecureLookupSupplier 中声明的字段
GET_LOOKUP_PERMISSION_NAME -
构造方法总结
构造方法构造方法描述CallSiteDescriptor(MethodHandles.Lookup lookup, Operation operation, MethodType methodType) 创建一个新的调用站点描述符。 -
方法总结
修饰符和类型方法描述final CallSiteDescriptorchangeMethodType(MethodType newMethodType) 查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。protected CallSiteDescriptorchangeMethodTypeInternal(MethodType newMethodType) 查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。final CallSiteDescriptorchangeOperation(Operation newOperation) 查找或创建一个调用站点描述符,该描述符仅在操作上与此描述符不同。protected CallSiteDescriptorchangeOperationInternal(Operation newOperation) 查找或创建一个调用站点描述符,该描述符仅在操作上与此描述符不同。boolean如果此调用站点描述符等于传递的对象,则返回 true。final MethodType调用站点的方法类型。final Operation返回调用站点的操作。inthashCode()返回此调用站点描述符的基于值的哈希码,该哈希码是根据其操作、方法类型以及查找对象的查找类和查找模式计算得出的。toString()返回此调用站点描述符的字符串表示形式,格式为name(parameterTypes)returnType@lookup。在类 jdk.dynalink.SecureLookupSupplier 中声明的方法
getLookup, getLookupPrivileged
-
构造方法详细信息
-
CallSiteDescriptor
创建一个新的调用站点描述符。- 参数:
lookup- 描述调用站点所属类的查找对象。从java.lang.invokebootstrap 方法创建描述符时,它应该是传递给 bootstrap 的查找。operation- 调用点的动态操作。methodType- 调用站点的方法类型。从java.lang.invoke引导程序方法创建描述符时,它应该是传递给引导程序的方法类型。
-
-
方法详情
-
getOperation
返回调用站点的操作。- 返回:
- 在调用站点的操作。
-
getMethodType
调用站点的方法类型。- 返回:
- 调用站点的方法类型。
-
changeMethodType
查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。调用changeMethodTypeInternal(MethodType)。- 参数:
newMethodType- 新方法类型- 返回:
- 方法类型已更改的调用站点描述符。
- 抛出:
NullPointerException- 如果newMethodType为空。
-
changeMethodTypeInternal
查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。子类必须覆盖此方法以返回其确切类的对象。如果重写的方法更改了描述符中方法类型以外的其他内容(它的类、查找或操作),或者返回 null,则AssertionError将从changeMethodType(MethodType)抛出。- 参数:
newMethodType- 新方法类型- 返回:
- 具有更改的方法类型的调用站点描述符。
-
changeOperation
查找或创建一个调用站点描述符,该描述符仅在操作上与此描述符不同。调用changeOperationInternal(Operation)。- 参数:
newOperation- 新操作- 返回:
- 具有更改操作的调用站点描述符。
- 抛出:
NullPointerException- 如果newOperation为空。SecurityException- 如果描述符的查找不是MethodHandles.publicLookup()并且存在安全管理器,并且对RuntimePermission("dynalink.getLookup")的检查失败。这是必要的,因为更改调用站点描述符中的操作允许为带有查找的任意操作构造描述符。
-
changeOperationInternal
查找或创建一个调用站点描述符,该描述符仅在操作上与此描述符不同。子类必须覆盖此方法以返回其确切类的对象。如果重写的方法更改了描述符中操作以外的其他内容(其类、查找或方法类型),或者返回 null,则AssertionError将从changeOperation(Operation)抛出。- 参数:
newOperation- 新操作- 返回:
- 具有更改操作的调用站点描述符。
-
equals
如果此调用站点描述符等于传递的对象,则返回 true。如果另一个对象属于完全相同的类,它们的操作和方法类型相同,并且它们的查找具有相同的MethodHandles.Lookup.lookupClass()和MethodHandles.Lookup.lookupModes(),则认为是相等的。 -
hashCode
public int hashCode()返回此调用站点描述符的基于值的哈希码,该哈希码是根据其操作、方法类型以及查找对象的查找类和查找模式计算得出的。 -
toString
返回此调用站点描述符的字符串表示形式,格式为name(parameterTypes)returnType@lookup。
-