Module  jdk.dynalink
软件包  jdk.dynalink

Class 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引导方法创建描述符时,应该将查询传递给引导程序。
        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
        重写:
        toStringObject
        结果
        对象的字符串表示形式。