模块 jdk.dynalink

类 CallSiteDescriptor

java.lang.Object
jdk.dynalink.SecureLookupSupplier
jdk.dynalink.CallSiteDescriptor

public class CallSiteDescriptor extends SecureLookupSupplier
调用站点描述符包含链接调用站点所需的所有信息。此信息通常作为参数传递给引导程序方法,包括发生调用点的调用者类上的 MethodHandles.Lookup 对象、调用点的动态操作以及调用点的方法类型。 CallSiteDescriptor 对象在 Dynalink 中用于捕获和存储这些参数以供 DynamicLinker 后续使用。

内置 RelinkableCallSite 实现的构造函数都采用调用站点描述符。

调用站点描述符必须是不可变的。您可以按原样使用此类,也可以将其子类化,特别是如果您需要向描述符添加更多信息(通常是将附加参数中的值传递给引导方法。由于描述符必须是不可变的,因此您可以设置一个缓存等效描述符,以便调用站点共享它们。

该类扩展了 SecureLookupSupplier ,以便对其携带的 MethodHandles.Lookup 对象进行安全检查访问。此查找应用于查找方法句柄以设置为此描述符所描述的调用站点的目标。

  • 构造方法详细信息

    • CallSiteDescriptor

      public CallSiteDescriptor(MethodHandles.Lookup  lookup, Operation  operation, MethodType  methodType)
      创建一个新的调用站点描述符。
      参数:
      lookup - 描述调用站点所属类的查找对象。从 java.lang.invoke bootstrap 方法创建描述符时,它应该是传递给 bootstrap 的查找。
      operation - 调用点的动态操作。
      methodType - 调用站点的方法类型。从 java.lang.invoke 引导程序方法创建描述符时,它应该是传递给引导程序的方法类型。
  • 方法详情

    • getOperation

      public final Operation  getOperation()
      返回调用站点的操作。
      返回:
      在调用站点的操作。
    • getMethodType

      public final MethodType  getMethodType()
      调用站点的方法类型。
      返回:
      调用站点的方法类型。
    • changeMethodType

      public final CallSiteDescriptor  changeMethodType(MethodType  newMethodType)
      查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。调用 changeMethodTypeInternal(MethodType)
      参数:
      newMethodType - 新方法类型
      返回:
      方法类型已更改的调用站点描述符。
      抛出:
      NullPointerException - 如果 newMethodType 为空。
    • changeMethodTypeInternal

      protected CallSiteDescriptor  changeMethodTypeInternal(MethodType  newMethodType)
      查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。子类必须覆盖此方法以返回其确切类的对象。如果重写的方法更改了描述符中方法类型以外的其他内容(它的类、查找或操作),或者返回 null,则 AssertionError 将从 changeMethodType(MethodType) 抛出。
      参数:
      newMethodType - 新方法类型
      返回:
      具有更改的方法类型的调用站点描述符。
    • changeOperation

      public final CallSiteDescriptor  changeOperation(Operation  newOperation)
      查找或创建一个调用站点描述符,该描述符仅在操作上与此描述符不同。调用 changeOperationInternal(Operation)
      参数:
      newOperation - 新操作
      返回:
      具有更改操作的调用站点描述符。
      抛出:
      NullPointerException - 如果 newOperation 为空。
      SecurityException - 如果描述符的查找不是 MethodHandles.publicLookup() 并且存在安全管理器,并且对 RuntimePermission("dynalink.getLookup") 的检查失败。这是必要的,因为更改调用站点描述符中的操作允许为带有查找的任意操作构造描述符。
    • changeOperationInternal

      protected CallSiteDescriptor  changeOperationInternal(Operation  newOperation)
      查找或创建一个调用站点描述符,该描述符仅在操作上与此描述符不同。子类必须覆盖此方法以返回其确切类的对象。如果重写的方法更改了描述符中操作以外的其他内容(其类、查找或方法类型),或者返回 null,则 AssertionError 将从 changeOperation(Operation) 抛出。
      参数:
      newOperation - 新操作
      返回:
      具有更改操作的调用站点描述符。
    • equals

      public boolean equals(Object  obj)
      如果此调用站点描述符等于传递的对象,则返回 true。如果另一个对象属于完全相同的类,它们的操作和方法类型相同,并且它们的查找具有相同的 MethodHandles.Lookup.lookupClass() MethodHandles.Lookup.lookupModes() ,则认为是相等的。
      重写:
      equals 在类 Object
      参数:
      obj - 要比较的参考对象。
      返回:
      true 如果此对象与 obj 参数相同; false否则。
      参见:
    • hashCode

      public int hashCode()
      返回此调用站点描述符的基于值的哈希码,该哈希码是根据其操作、方法类型以及查找对象的查找类和查找模式计算得出的。
      重写:
      hashCode 在类 Object
      返回:
      此调用站点描述符的基于值的哈希码。
      参见:
    • toString

      public String  toString()
      返回此调用站点描述符的字符串表示形式,格式为 name(parameterTypes)returnType@lookup
      重写:
      toString 在类 Object
      返回:
      对象的字符串表示形式。