java.lang.Object
jdk.dynalink.SecureLookupSupplier
jdk.dynalink.CallSiteDescriptor
调用站点描述符包含链接调用站点所需的所有信息。这些信息通常作为参数传递给引导方法,并包括调用站点所在的调用者类上的
MethodHandles.Lookup
对象,调用站点的动态操作以及调用站点的方法类型。 CallSiteDescriptor
对象在Dynalink中用于捕获和存储这些参数,以便后续由DynamicLinker
使用。
内置的RelinkableCallSite
实现的构造函数都接受一个调用站点描述符。
调用站点描述符必须是不可变的。您可以直接使用这个类,也可以对其进行子类化,特别是如果您需要向描述符添加更多信息(通常是作为附加参数传递给引导方法的值)。由于描述符必须是不可变的,您可以为等效描述符设置一个缓存,以便调用站点共享它们。
该类扩展了SecureLookupSupplier
,用于安全检查访问其携带的MethodHandles.Lookup
对象。应该使用此查找来查找要设置为此描述符描述的调用站点的目标的方法句柄。
-
Field Summary
Fields declared in class jdk.dynalink.SecureLookupSupplier
GET_LOOKUP_PERMISSION_NAME
-
Constructor Summary
ConstructorDescriptionCallSiteDescriptor
(MethodHandles.Lookup lookup, Operation operation, MethodType methodType) 创建一个新的调用站点描述符。 -
Method Summary
Modifier and TypeMethodDescriptionfinal CallSiteDescriptor
changeMethodType
(MethodType newMethodType) 查找或创建一个仅在方法类型上与此描述符不同的调用站点描述符。protected CallSiteDescriptor
changeMethodTypeInternal
(MethodType newMethodType) 查找或创建一个仅在方法类型上与此描述符不同的调用站点描述符。final CallSiteDescriptor
changeOperation
(Operation newOperation) 查找或创建一个仅在操作上与此描述符不同的调用站点描述符。protected CallSiteDescriptor
changeOperationInternal
(Operation newOperation) 查找或创建一个仅在操作上与此描述符不同的调用站点描述符。boolean
如果此调用站点描述符等于传递的对象,则返回true。final MethodType
调用站点的方法类型。final Operation
返回调用站点的操作。int
hashCode()
返回此调用站点描述符的基于值的哈希码,该哈希码是从其操作、方法类型和查找对象的查找类和查找模式计算得出的。toString()
返回此调用站点描述符的字符串表示形式,格式为name(parameterTypes)returnType@lookup
。Methods declared in class jdk.dynalink.SecureLookupSupplier
getLookup, getLookupPrivileged
-
Constructor Details
-
CallSiteDescriptor
创建一个新的调用站点描述符。- 参数:
-
lookup
- 描述调用站点所属类的查找对象。当从java.lang.invoke
引导方法创建描述符时,应该是传递给引导方法的查找。 -
operation
- 调用站点的动态操作。 -
methodType
- 调用站点的方法类型。当从java.lang.invoke
引导方法创建描述符时,应该是传递给引导方法的方法类型。
-
-
Method Details
-
getOperation
返回调用站点的操作。- 返回:
- 调用站点的操作。
-
getMethodType
调用站点的方法类型。- 返回:
- 调用站点的方法类型。
-
changeMethodType
查找或创建一个仅在方法类型上与此描述符不同的调用站点描述符。调用changeMethodTypeInternal(MethodType)
。- 参数:
-
newMethodType
- 新的方法类型 - 返回:
- 具有更改方法类型的调用站点描述符。
- 抛出:
-
NullPointerException
- 如果newMethodType
为null。
-
changeMethodTypeInternal
查找或创建一个仅在方法类型上与此描述符不同的调用站点描述符。子类必须重写此方法以返回其确切类的对象。如果重写的方法更改描述符中的方法类型之外的其他内容(其类、查找或操作),或返回null,则将从changeMethodType(MethodType)
抛出AssertionError
。- 参数:
-
newMethodType
- 新的方法类型 - 返回:
- 具有更改方法类型的调用站点描述符。
-
changeOperation
查找或创建一个仅在操作上与此描述符不同的调用站点描述符。调用changeOperationInternal(Operation)
。- 参数:
-
newOperation
- 新的操作 - 返回:
- 具有更改操作的调用站点描述符。
- 抛出:
-
NullPointerException
- 如果newOperation
为null。 -
SecurityException
- 如果描述符的查找不是MethodHandles.publicLookup()
,并且存在安全管理器,并且RuntimePermission("dynalink.getLookup")
的检查失败。这是必要的,因为更改调用站点描述符中的操作允许为具有查找的任意操作制造描述符。
-
changeOperationInternal
查找或创建一个仅在操作上与此描述符不同的调用站点描述符。子类必须重写此方法以返回其确切类的对象。如果重写的方法更改描述符中的操作之外的其他内容(其类、查找或方法类型),或返回null,则将从changeOperation(Operation)
抛出AssertionError
。- 参数:
-
newOperation
- 新的操作 - 返回:
- 具有更改操作的调用站点描述符。
-
equals
如果此调用站点描述符等于传递的对象,则返回true。如果另一个对象是完全相同类的对象,它们的操作和方法类型相等,并且它们的查找具有相同的MethodHandles.Lookup.lookupClass()
和MethodHandles.Lookup.lookupModes()
,则被视为相等。 -
hashCode
public int hashCode()返回此调用站点描述符的基于值的哈希码,该哈希码是从其操作、方法类型和查找对象的查找类和查找模式计算得出的。 -
toString
返回此调用站点描述符的字符串表示形式,格式为name(parameterTypes)returnType@lookup
。
-