- java.lang.Object
-
- jdk.dynalink.SecureLookupSupplier
-
- jdk.dynalink.CallSiteDescriptor
-
public class CallSiteDescriptor extends SecureLookupSupplier
呼叫站点描述符包含链接呼叫站点所需的所有信息。 此信息通常作为参数传递给bootstrap方法,并由调用者站点中发生呼叫站点的MethodHandles.Lookup
对象,呼叫站点的动态操作以及呼叫站点的方法类型组成。 在Dynalink中使用CallSiteDescriptor
对象来捕获和存储这些参数,以供DynamicLinker
随后使用。内置的
RelinkableCallSite
实现的构造函数都采用调用站点描述符。调用站点描述符必须是不可变的。 您可以按原样使用此类,也可以将其子类化,尤其是当您需要向描述符添加更多信息时(通常,将其他参数传递给引导方法的值。由于描述符必须是不可变的,因此您可以设置缓存等效描述符以使呼叫站点共享它们。
该类扩展了
SecureLookupSupplier
,用于对其携带的MethodHandles.Lookup
对象进行安全检查访问。 此查找应该用于查找方法句柄,以设置为此描述符描述的调用站点的目标。
-
-
字段汇总
-
声明的属性在类 jdk.dynalink.SecureLookupSupplier
GET_LOOKUP_PERMISSION_NAME
-
-
构造方法摘要
构造方法 构造器 描述 CallSiteDescriptor(MethodHandles.Lookup lookup, Operation operation, MethodType methodType)
创建一个新的调用站点描述符。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 CallSiteDescriptor
changeMethodType(MethodType newMethodType)
查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。protected CallSiteDescriptor
changeMethodTypeInternal(MethodType newMethodType)
查找或创建仅在其方法类型上与此描述符不同的调用站点描述符。CallSiteDescriptor
changeOperation(Operation newOperation)
查找或创建仅在操作上与此描述符不同的调用站点描述符。protected CallSiteDescriptor
changeOperationInternal(Operation newOperation)
查找或创建仅在操作上与此描述符不同的调用站点描述符。boolean
equals(Object obj)
如果此调用站点描述符等于传递的对象,则返回true。MethodType
getMethodType()
呼叫站点的方法类型。Operation
getOperation()
返回呼叫站点的操作。int
hashCode()
返回此调用站点描述符的基于值的哈希代码,该描述符根据其操作,方法类型和查找对象的查找类和查找模式计算得出。String
toString()
返回此调用站点描述符的字符串表示形式,格式为name(parameterTypes)returnType@lookup
。-
声明方法的类 jdk.dynalink.SecureLookupSupplier
getLookup, getLookupPrivileged
-
-
-
-
构造方法详细信息
-
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()
呼叫站点的方法类型。- 结果
- 呼叫站点的方法类型。
-
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
。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此调用站点描述符的基于值的哈希代码,该描述符根据其操作,方法类型和查找对象的查找类和查找模式计算得出。- 重写:
-
hashCode
在类Object
- 结果
- 此调用站点描述符的基于值的哈希代码。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-