Module jdk.dynalink
Package jdk.dynalink

Class CallSiteDescriptor

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

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

内置的RelinkableCallSite实现的构造函数都接受一个调用站点描述符。

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

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

  • Constructor Details

    • CallSiteDescriptor

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

    • getOperation

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

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

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

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

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

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

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

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

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