模块  jdk.dynalink
软件包  jdk.dynalink

Class CallSiteDescriptor


  • public class CallSiteDescriptor
    extends SecureLookupSupplier
    呼叫站点描述符包含链接呼叫站点所需的所有信息。 此信息通常作为参数传递给bootstrap方法,并由调用者站点中发生呼叫站点的MethodHandles.Lookup对象,呼叫站点的动态操作以及呼叫站点的方法类型组成。 在Dynalink中使用CallSiteDescriptor对象来捕获和存储这些参数,以供DynamicLinker随后使用。

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

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

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

    • 构造方法详细信息

      • CallSiteDescriptor

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

      • getOperation

        public final Operation getOperation()
        返回呼叫站点的操作。
        结果
        呼叫站点的操作。
      • getMethodType

        public final MethodType getMethodType()
        呼叫站点的方法类型。
        结果
        呼叫站点的方法类型。
      • 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 - 新操作
        结果
        具有已更改操作的调用站点描述符。
      • toString

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