- java.lang.Object
-
- jdk.dynalink.SecureLookupSupplier
-
- jdk.dynalink.CallSiteDescriptor
-
public class CallSiteDescriptor extends SecureLookupSupplier
呼叫站点描述符包含链接呼叫站点所需的所有信息。 该信息通常作为引导方法的参数传递,并由调用站点发生的呼叫者类的MethodHandles.Lookup
对象,呼叫站点的动态操作以及呼叫站点的方法类型组成。CallSiteDescriptor
对象在Dynalink中用于捕获和存储这些参数供DynamicLinker
后续使用。内置的
RelinkableCallSite
实现的构造函数都采用一个调用站点描述符。呼叫站点描述符必须是不可变的。 您可以按原样使用此类,也可以将其子类化,特别是如果需要向描述符添加进一步的信息(通常是通过附加参数传递给引导方法的值)。由于描述符必须是不可变的,因此可以设置缓存用于等效描述符以使呼叫站点共享它们。
该类扩展了
SecureLookupSupplier
,用于安全检查访问其所携带的MethodHandles.Lookup
对象。 该查找应该用于查找方法句柄来设置该描述符描述的调用站点的目标。
-
-
Field Summary
-
Fields inherited from class jdk.dynalink.SecureLookupSupplier
GET_LOOKUP_PERMISSION_NAME
-
-
构造方法摘要
构造方法 Constructor 描述 CallSiteDescriptor(MethodHandles.Lookup lookup, Operation operation, MethodType methodType)
创建一个新的呼叫站点描述符。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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
。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from class 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)
-
-