类的用途
java.lang.invoke.MethodHandle
使用 MethodHandle 的包
包
描述
提供对 Java 运行时之外的内存和函数的低级访问。
java.lang.invoke 包提供用于与 Java 虚拟机交互的低级原语。
java.lang.runtime 包为 Java 语言提供低级运行时支持。
包含用于链接
invokedynamic 调用站点的接口和类。
包含普通 Java 对象的链接器。
包含语言运行时所需的接口和类,以实现它们自己的特定于语言的对象模型和类型转换。
包含的类通过提供某些类的基本实现以及各种实用程序,使语言运行时更方便地实现自己的特定于语言的对象模型和类型转换。
包含通过提供某些类的基本实现以及各种实用程序使使用 Dynalink 更加方便的类。
-
MethodHandle 在 java.lang.foreign 中的用法
java.lang.foreign 中返回 MethodHandle 的方法修饰符和类型方法描述default MethodHandleMemoryLayout.bitOffsetHandle(MemoryLayout.PathElementPREVIEW... elements) 创建一个方法句柄,可用于计算给定布局路径选择的布局的偏移量(以位为单位),其中该路径被视为植根于此布局。default MethodHandleMemoryLayout.byteOffsetHandle(MemoryLayout.PathElementPREVIEW... elements) 创建一个方法句柄,该句柄可用于计算给定布局路径选择的布局的偏移量(以字节为单位),其中该路径被视为植根于此布局。Linker.downcallHandle(FunctionDescriptorPREVIEW function, Linker.OptionPREVIEW... options) 创建一个方法句柄,可用于调用具有给定签名的外部函数。default MethodHandleLinker.downcallHandle(MemorySegmentPREVIEW symbol, FunctionDescriptorPREVIEW function, Linker.OptionPREVIEW... options) 创建一个方法句柄,可用于调用具有给定签名和地址的外部函数。default MethodHandleMemoryLayout.sliceHandle(MemoryLayout.PathElementPREVIEW... elements) java.lang.foreign 中的方法,参数类型为 MethodHandle修饰符和类型方法描述Linker.upcallStub(MethodHandle target, FunctionDescriptorPREVIEW function, SegmentScopePREVIEW scope) 创建一个存根,它可以作为函数指针传递给其他外部函数,与给定范围相关联。 -
MethodHandle 在 java.lang.invoke 中的用法
java.lang.invoke 中返回 MethodHandle 的方法修饰符和类型方法描述static MethodHandleMethodHandles.arrayConstructor(Class<?> arrayClass) 生成一个方法句柄来构造所需类型的数组,就像通过anewarray字节码一样。static MethodHandleMethodHandles.arrayElementGetter(Class<?> arrayClass) 生成一个方法句柄,提供对数组元素的读取访问权限,就像通过aaload字节码一样。static MethodHandleMethodHandles.arrayElementSetter(Class<?> arrayClass) 生成一个方法句柄,提供对数组元素的写访问权限,就像通过astore字节码一样。static MethodHandleMethodHandles.arrayLength(Class<?> arrayClass) 生成一个返回数组长度的方法句柄,就像由arraylength字节码一样。MethodHandle.asCollector(int collectArgPos, Class<?> arrayType, int arrayLength) 创建一个 array-collecting 方法句柄,它接受从给定位置开始的给定数量的位置参数,并将它们收集到一个数组参数中。MethodHandle.asCollector(Class<?> arrayType, int arrayLength) 创建一个 array-collecting 方法句柄,它接受给定数量的尾随位置参数并将它们收集到一个数组参数中。MethodHandle.asFixedArity()生成一个 fixed arity 方法句柄,它在其他方面等同于当前方法句柄。MethodHandle.asSpreader(int spreadArgPos, Class<?> arrayType, int arrayLength) 创建一个 array-spreading 方法句柄,它在给定位置接受数组参数,并将其元素作为位置参数展开以代替数组。MethodHandle.asSpreader(Class<?> arrayType, int arrayLength) 创建一个 array-spreading 方法句柄,它接受尾随数组参数并将其元素作为位置参数展开。final MethodHandleMethodHandle.asType(MethodType newType) 生成一个适配器方法句柄,它使当前方法句柄的类型适应新类型。MethodHandle.asVarargsCollector(Class<?> arrayType) 制作一个 variable arity 适配器,它能够接受任意数量的尾随位置参数并将它们收集到一个数组参数中。MethodHandles.Lookup.bind(Object receiver, String name, MethodType type) 为非静态方法生成早期绑定方法句柄。将值x绑定到方法句柄的第一个参数,而不调用它。static MethodHandleMethodHandles.catchException(MethodHandle target, Class<? extends Throwable> exType, MethodHandle handler) 通过在异常处理程序中运行它来创建一个适应目标方法句柄的方法句柄。static MethodHandleMethodHandles.collectArguments(MethodHandle target, int pos, MethodHandle filter) 通过使用过滤器(另一个方法句柄)预处理其参数的子序列来调整目标方法句柄。static MethodHandle生成请求的返回类型的方法句柄,每次调用时返回给定的常量值。static MethodHandleMethodHandles.countedLoop(MethodHandle iterations, MethodHandle init, MethodHandle body) 构造一个运行给定迭代次数的循环。static MethodHandleMethodHandles.countedLoop(MethodHandle start, MethodHandle end, MethodHandle init, MethodHandle body) 构造一个对一定范围内的数字进行计数的循环。static MethodHandleMethodHandles.doWhileLoop(MethodHandle init, MethodHandle body, MethodHandle pred) 从初始值设定项、主体和谓词构造一个do-while循环。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, Class<?>... valueTypes) 生成一个方法句柄,该句柄将在调用其他指定的参数之前丢弃一些伪参数目标方法句柄。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes) 生成一个方法句柄,该句柄将在调用其他指定的参数之前丢弃一些伪参数目标方法句柄。static MethodHandleMethodHandles.dropArgumentsToMatch(MethodHandle target, int skip, List<Class<?>> newTypes, int pos) 调整目标方法句柄以匹配给定的参数类型列表。static MethodHandleMethodHandles.dropReturn(MethodHandle target) 删除目标句柄的返回值(如果有)。abstract MethodHandleCallSite.dynamicInvoker()生成等效于已链接到此调用站点的 invokedynamic 指令的方法句柄。final MethodHandleConstantCallSite.dynamicInvoker()返回此调用站点的永久目标。final MethodHandleMutableCallSite.dynamicInvoker()生成等效于已链接到此调用站点的 invokedynamic 指令的方法句柄。final MethodHandleVolatileCallSite.dynamicInvoker()生成等效于已链接到此调用站点的 invokedynamic 指令的方法句柄。static MethodHandleMethodHandles.empty(MethodType type) 生成请求类型的方法句柄,该句柄忽略任何参数,不执行任何操作,并根据返回类型返回合适的默认值。static MethodHandleMethodHandles.exactInvoker(MethodType type) 生成一个特殊的 invoker method handle 可用于调用给定类型的任何方法句柄,就像通过invokeExact一样。static MethodHandleMethodHandles.explicitCastArguments(MethodHandle target, MethodType newType) 生成一个方法句柄,它通过成对参数和返回类型转换使给定方法句柄的类型适应新类型。static MethodHandleMethodHandles.filterArguments(MethodHandle target, int pos, MethodHandle... filters) 通过预处理一个或多个参数来调整目标方法句柄,每个参数都有自己的一元过滤函数,然后调用目标,每个预处理参数替换为相应过滤函数的结果。static MethodHandleMethodHandles.filterReturnValue(MethodHandle target, MethodHandle filter) 通过使用过滤器(另一个方法句柄)后处理其返回值(如果有)来调整目标方法句柄。MethodHandles.Lookup.findConstructor(Class<?> refc, MethodType type) 使用指定类型的构造方法生成一个方法句柄,该句柄创建一个对象并对其进行初始化。MethodHandles.Lookup.findGetter(Class<?> refc, String name, Class<?> type) 生成一个方法句柄,提供对非静态字段的读取访问权限。MethodHandles.Lookup.findSetter(Class<?> refc, String name, Class<?> type) 生成一个方法句柄,提供对非静态字段的写访问权限。MethodHandles.Lookup.findSpecial(Class<?> refc, String name, MethodType type, Class<?> specialCaller) 为虚拟方法生成早期绑定方法句柄。MethodHandles.Lookup.findStatic(Class<?> refc, String name, MethodType type) 为静态方法生成方法句柄。MethodHandles.Lookup.findStaticGetter(Class<?> refc, String name, Class<?> type) 生成一个方法句柄,提供对静态字段的读取访问权限。MethodHandles.Lookup.findStaticSetter(Class<?> refc, String name, Class<?> type) 生成一个方法句柄,提供对静态字段的写访问权。MethodHandles.Lookup.findVirtual(Class<?> refc, String name, MethodType type) 为虚拟方法生成方法句柄。static MethodHandleMethodHandles.foldArguments(MethodHandle target, int pos, MethodHandle combiner) 通过预处理它的一些参数来调整目标方法句柄,从给定位置开始,然后使用预处理的结果调用目标,插入到折叠参数之前的原始参数序列中。static MethodHandleMethodHandles.foldArguments(MethodHandle target, MethodHandle combiner) 通过预处理它的一些参数来调整目标方法句柄,然后使用预处理的结果调用目标,将其插入到原始参数序列中。abstract MethodHandleCallSite.getTarget()根据此调用站点的特定类定义的行为,返回调用站点的目标方法。final MethodHandleConstantCallSite.getTarget()返回调用站点的目标方法,其行为类似于ConstantCallSite的final字段。final MethodHandleMutableCallSite.getTarget()返回调用站点的目标方法,其行为类似于MutableCallSite的普通字段。final MethodHandleVolatileCallSite.getTarget()返回调用站点的目标方法,其行为类似于VolatileCallSite的volatile字段。static MethodHandleMethodHandles.guardWithTest(MethodHandle test, MethodHandle target, MethodHandle fallback) 通过用测试保护它来创建一个适应目标方法句柄的方法句柄,一个boolean方法句柄。SwitchPoint.guardWithTest(MethodHandle target, MethodHandle fallback) 返回一个方法句柄,它总是委托给目标或回退。static MethodHandle生成一个方法句柄,该句柄在调用时返回其唯一参数。static MethodHandleMethodHandles.insertArguments(MethodHandle target, int pos, Object... values) 在方法句柄调用之前为目标方法句柄提供一个或多个bound arguments。static MethodHandleMethodHandles.invoker(MethodType type) 生成一个特殊的 invoker method handle 可用于调用与给定类型兼容的任何方法句柄,就像通过invoke一样。static MethodHandleMethodHandles.iteratedLoop(MethodHandle iterator, MethodHandle init, MethodHandle body) 构造一个循环,其范围超过Iterator<T>产生的值。static MethodHandleMethodHandles.loop(MethodHandle[]... clauses) 构造一个表示循环的方法句柄,其中包含多个循环变量,这些循环变量在每次迭代时更新和检查。static MethodHandleMethodHandles.permuteArguments(MethodHandle target, MethodType newType, int... reorder) 通过重新排序参数,生成一个方法句柄,该方法句柄将给定方法句柄的调用序列调整为新类型。static MethodHandleMethodHandles.spreadInvoker(MethodType type, int leadingArgCount) 生成一个方法句柄,它将调用给定type的任何方法句柄,给定数量的尾随参数替换为单个尾随Object[]数组。static MethodHandleMethodHandles.tableSwitch(MethodHandle fallback, MethodHandle... targets) 创建一个表切换方法句柄,可用于根据给定的目标索引(称为选择器)切换一组目标方法句柄。static MethodHandleMethodHandles.throwException(Class<?> returnType, Class<? extends Throwable> exType) 生成一个方法句柄,它将抛出给定exType的异常。VarHandle.toMethodHandle(VarHandle.AccessMode accessMode) 获得绑定到此 VarHandle 和给定访问模式的方法句柄。static MethodHandleMethodHandles.tryFinally(MethodHandle target, MethodHandle cleanup) 通过将target方法句柄包装在try-finally块中来创建一个方法句柄。制作一个 直接方法句柄 到m,如果查找类具有权限。MethodHandles.Lookup.unreflectConstructor(Constructor<?> c) 为反射的构造方法生成方法句柄。MethodHandles.Lookup.unreflectGetter(Field f) 生成一个方法句柄,提供对反射字段的读取访问权限。MethodHandles.Lookup.unreflectSetter(Field f) 生成一个方法句柄,提供对反射字段的写访问权限。MethodHandles.Lookup.unreflectSpecial(Method m, Class<?> specialCaller) 为反射方法生成方法句柄。static MethodHandleMethodHandles.varHandleExactInvoker(VarHandle.AccessMode accessMode, MethodType type) 生成一个特殊的 invoker method handle,它可用于在关联访问模式类型与给定类型兼容的任何 VarHandle 上调用签名多态访问模式方法。static MethodHandleMethodHandles.varHandleInvoker(VarHandle.AccessMode accessMode, MethodType type) 生成一个特殊的 invoker method handle,它可用于在关联访问模式类型与给定类型兼容的任何 VarHandle 上调用签名多态访问模式方法。static MethodHandleMethodHandles.whileLoop(MethodHandle init, MethodHandle pred, MethodHandle body) 从初始值设定项、主体和谓词构造一个while循环。MethodHandle.withVarargs(boolean makeVarargs) static MethodHandleMethodHandleProxies.wrapperInstanceTarget(Object x) 生成或恢复目标方法句柄,该句柄在行为上等效于此包装器实例的唯一方法。static MethodHandle生成所请求返回类型的常量方法句柄,每次调用时返回该类型的默认值。java.lang.invoke 中的方法,参数类型为 MethodHandle修饰符和类型方法描述static <T> TMethodHandleProxies.asInterfaceInstance(Class<T> intfc, MethodHandle target) 生成给定的单一方法接口的实例,该接口将其调用重定向到给定的方法句柄。static MethodHandleMethodHandles.catchException(MethodHandle target, Class<? extends Throwable> exType, MethodHandle handler) 通过在异常处理程序中运行它来创建一个适应目标方法句柄的方法句柄。static MethodHandleMethodHandles.collectArguments(MethodHandle target, int pos, MethodHandle filter) 通过使用过滤器(另一个方法句柄)预处理其参数的子序列来调整目标方法句柄。static VarHandleMethodHandles.collectCoordinates(VarHandle target, int pos, MethodHandle filter) 预览。通过使用过滤器(方法句柄)预处理其坐标值的子序列来调整目标变量句柄。static MethodHandleMethodHandles.countedLoop(MethodHandle iterations, MethodHandle init, MethodHandle body) 构造一个运行给定迭代次数的循环。static MethodHandleMethodHandles.countedLoop(MethodHandle start, MethodHandle end, MethodHandle init, MethodHandle body) 构造一个对一定范围内的数字进行计数的循环。static MethodHandleMethodHandles.doWhileLoop(MethodHandle init, MethodHandle body, MethodHandle pred) 从初始值设定项、主体和谓词构造一个do-while循环。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, Class<?>... valueTypes) 生成一个方法句柄,该句柄将在调用其他指定的参数之前丢弃一些伪参数目标方法句柄。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes) 生成一个方法句柄,该句柄将在调用其他指定的参数之前丢弃一些伪参数目标方法句柄。static MethodHandleMethodHandles.dropArgumentsToMatch(MethodHandle target, int skip, List<Class<?>> newTypes, int pos) 调整目标方法句柄以匹配给定的参数类型列表。static MethodHandleMethodHandles.dropReturn(MethodHandle target) 删除目标句柄的返回值(如果有)。static MethodHandleMethodHandles.explicitCastArguments(MethodHandle target, MethodType newType) 生成一个方法句柄,它通过成对参数和返回类型转换使给定方法句柄的类型适应新类型。static MethodHandleMethodHandles.filterArguments(MethodHandle target, int pos, MethodHandle... filters) 通过预处理一个或多个参数来调整目标方法句柄,每个参数都有自己的一元过滤函数,然后调用目标,每个预处理参数替换为相应过滤函数的结果。static VarHandleMethodHandles.filterCoordinates(VarHandle target, int pos, MethodHandle... filters) 预览。通过使用一元过滤函数预处理传入的坐标值来调整目标变量句柄。static MethodHandleMethodHandles.filterReturnValue(MethodHandle target, MethodHandle filter) 通过使用过滤器(另一个方法句柄)后处理其返回值(如果有)来调整目标方法句柄。static VarHandleMethodHandles.filterValue(VarHandle target, MethodHandle filterToTarget, MethodHandle filterFromTarget) 预览。过滤器函数预处理传入和传出值来调整目标 var 句柄。static MethodHandleMethodHandles.foldArguments(MethodHandle target, int pos, MethodHandle combiner) 通过预处理它的一些参数来调整目标方法句柄,从给定位置开始,然后使用预处理的结果调用目标,插入到折叠参数之前的原始参数序列中。static MethodHandleMethodHandles.foldArguments(MethodHandle target, MethodHandle combiner) 通过预处理它的一些参数来调整目标方法句柄,然后使用预处理的结果调用目标,将其插入到原始参数序列中。static MethodHandleMethodHandles.guardWithTest(MethodHandle test, MethodHandle target, MethodHandle fallback) 通过用测试保护它来创建一个适应目标方法句柄的方法句柄,一个boolean方法句柄。SwitchPoint.guardWithTest(MethodHandle target, MethodHandle fallback) 返回一个方法句柄,它总是委托给目标或回退。static MethodHandleMethodHandles.insertArguments(MethodHandle target, int pos, Object... values) 在方法句柄调用之前为目标方法句柄提供一个或多个bound arguments。static ObjectConstantBootstraps.invoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args) 返回使用提供的参数调用方法句柄的结果。static MethodHandleMethodHandles.iteratedLoop(MethodHandle iterator, MethodHandle init, MethodHandle body) 构造一个循环,其范围超过Iterator<T>产生的值。static MethodHandleMethodHandles.loop(MethodHandle[]... clauses) 构造一个表示循环的方法句柄,其中包含多个循环变量,这些循环变量在每次迭代时更新和检查。static CallSiteLambdaMetafactory.metafactory(MethodHandles.Lookup caller, String interfaceMethodName, MethodType factoryType, MethodType interfaceMethodType, MethodHandle implementation, MethodType dynamicMethodType) 在适当的类型调整和参数的部分评估之后,通过委托给提供的MethodHandle来促进实现一个或多个接口的简单“函数对象”的创建。static MethodHandleMethodHandles.permuteArguments(MethodHandle target, MethodType newType, int... reorder) 通过重新排序参数,生成一个方法句柄,该方法句柄将给定方法句柄的调用序列调整为新类型。static <T extends Member>
TMethodHandles.reflectAs(Class<T> expected, MethodHandle target) 对 直接方法句柄 执行未经检查的“破解”。MethodHandles.Lookup.revealDirect(MethodHandle target) 破解由此查找对象或类似对象创建的 直接方法句柄。abstract voidCallSite.setTarget(MethodHandle newTarget) 根据此调用站点的特定类定义的行为,更新此调用站点的目标方法。final voidConstantCallSite.setTarget(MethodHandle ignore) 总是抛出一个UnsupportedOperationException。voidMutableCallSite.setTarget(MethodHandle newTarget) 将此调用站点的目标方法更新为普通变量。voidVolatileCallSite.setTarget(MethodHandle newTarget) 将此调用站点的目标方法更新为易失性变量。static MethodHandleMethodHandles.tableSwitch(MethodHandle fallback, MethodHandle... targets) 创建一个表切换方法句柄,可用于根据给定的目标索引(称为选择器)切换一组目标方法句柄。static MethodHandleMethodHandles.tryFinally(MethodHandle target, MethodHandle cleanup) 通过将target方法句柄包装在try-finally块中来创建一个方法句柄。static MethodHandleMethodHandles.whileLoop(MethodHandle init, MethodHandle pred, MethodHandle body) 从初始值设定项、主体和谓词构造一个while循环。java.lang.invoke 中的构造函数,参数类型为 MethodHandle修饰符构造方法描述ConstantCallSite(MethodHandle target) 创建具有永久目标的呼叫站点。protectedConstantCallSite(MethodType targetType, MethodHandle createTargetHook) 创建一个具有永久目标的调用站点,可能绑定到调用站点本身。MutableCallSite(MethodHandle target) 使用初始目标方法句柄创建调用站点对象。VolatileCallSite(MethodHandle target) 创建一个与其目标具有可变绑定的调用站点。 -
MethodHandle 在 java.lang.runtime 中的用法
java.lang.runtime 中的方法,参数类型为 MethodHandle修饰符和类型方法描述static ObjectObjectMethods.bootstrap(MethodHandles.Lookup lookup, String methodName, TypeDescriptor type, Class<?> recordClass, String names, MethodHandle... getters) Bootstrap 方法根据组件名称和访问器方法的描述为invokedynamic调用站点或动态常量池条目生成Object.equals(Object)、Object.hashCode()和Object.toString()方法。 -
MethodHandle 在 jdk.dynalink 中的用法
jdk.dynalink 中的方法,参数类型为 MethodHandle修饰符和类型方法描述voidRelinkableCallSite.initialize(MethodHandle relinkAndInvoke) 由动态链接器调用以通过设置重新链接和调用方法句柄来初始化可重新链接的调用站点。voidRelinkableCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) 每次重新链接调用站点时,动态链接器都会调用此方法(但请参阅RelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)以获取异常)。voidRelinkableCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) 每次重新链接调用站点时,动态链接器都会调用此方法and链接器希望调用站点丢弃任何先前的链接状态(这就是它与RelinkableCallSite.relink(GuardedInvocation, MethodHandle)的不同之处)。 -
MethodHandle 在 jdk.dynalink.beans 中的用法
jdk.dynalink.beans 中返回 MethodHandle 的方法修饰符和类型方法描述MissingMemberHandlerFactory.createMissingMemberHandler(LinkRequest linkRequest, LinkerServices linkerServices) 返回适合为特定链接请求实现缺失成员行为的方法句柄。 -
MethodHandle 在 jdk.dynalink.linker 中的用法
jdk.dynalink.linker 中返回 MethodHandle 的方法修饰符和类型方法描述LinkerServices.asType(MethodHandle handle, MethodType fromType) 类似于asType(MethodType)除了它还挂钩所有可用的GuardingTypeConverterFactory实现生成的方法句柄,提供特定于语言的参数类型强制。MethodTypeConversionStrategy.asType(MethodHandle target, MethodType newType) 将方法句柄转换为新类型。default MethodHandleLinkerServices.asTypeLosslessReturn(MethodHandle handle, MethodType fromType) 与LinkerServices.asType(MethodHandle, MethodType)类似,只是它专门处理返回值类型转换。GuardedInvocation.compose(MethodHandle fallback) 将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。GuardedInvocation.compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback) 将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。LinkerServices.filterInternalObjects(MethodHandle target) 修改方法句柄,以便任何可以接收潜在内部语言运行时对象的参数都将添加一个过滤器,以防止它们转义,可能通过包装它们来进行。GuardedInvocation.getGuard()返回守卫方法句柄。GuardedInvocation.getInvocation()返回调用方法句柄。LinkerServices.getTypeConverter(Class<?> sourceType, Class<?> targetType) 给定源类型和目标类型,返回在它们之间转换的方法句柄。MethodHandleTransformer.transform(MethodHandle target) 转换方法句柄。jdk.dynalink.linker 中的方法,参数类型为 MethodHandle修饰符和类型方法描述LinkerServices.asType(MethodHandle handle, MethodType fromType) 类似于asType(MethodType)除了它还挂钩所有可用的GuardingTypeConverterFactory实现生成的方法句柄,提供特定于语言的参数类型强制。MethodTypeConversionStrategy.asType(MethodHandle target, MethodType newType) 将方法句柄转换为新类型。default MethodHandleLinkerServices.asTypeLosslessReturn(MethodHandle handle, MethodType fromType) 与LinkerServices.asType(MethodHandle, MethodType)类似,只是它专门处理返回值类型转换。GuardedInvocation.compose(MethodHandle fallback) 将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。GuardedInvocation.compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback) 将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。GuardedInvocation.filterArguments(int pos, MethodHandle... filters) 使用MethodHandles.filterArguments(MethodHandle, int, MethodHandle...)将参数过滤器应用于调用和守卫(如果它存在并且至少有pos + 1个参数)。LinkerServices.filterInternalObjects(MethodHandle target) 修改方法句柄,以便任何可以接收潜在内部语言运行时对象的参数都将添加一个过滤器,以防止它们转义,可能通过包装它们来进行。GuardedInvocation.replaceMethods(MethodHandle newInvocation, MethodHandle newGuard) 使用不同的方法创建一个新的受保护的调用,保留切换点。MethodHandleTransformer.transform(MethodHandle target) 转换方法句柄。jdk.dynalink.linker 中的构造函数,参数类型为 MethodHandle修饰符构造方法描述GuardedInvocation(MethodHandle invocation) 创建一个新的无条件保护调用。GuardedInvocation(MethodHandle invocation, MethodHandle guard) 使用保护方法句柄创建一个新的保护调用。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint) 创建一个新的受保护的调用,同时具有一个保护方法句柄和一个可用于使其无效的切换点。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint[] switchPoints, Class<? extends Throwable> exception) 创建一个新的受保护的调用,带有一个保护方法句柄、任意数量的可用于使其无效的切换点,以及一个在调用时抛出的异常也会使其无效。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint, Class<? extends Throwable> exception) 创建一个新的受保护的调用,带有一个保护方法句柄,一个可用于使其无效的切换点,以及一个如果在调用时抛出也会使其无效的异常。GuardedInvocation(MethodHandle invocation, SwitchPoint switchPoint) 创建一个新的受保护的调用,可以通过切换点使其失效。 -
MethodHandle 在 jdk.dynalink.linker.support 中的用法
修饰符和类型方法描述static MethodHandleGuards.asType(MethodHandle test, MethodType type) 获取一个旨在用作守卫的方法句柄,并将其调整为请求的类型,但返回一个boolean。static MethodHandleGuards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type) 获取一个旨在用作守卫的方法句柄,并将其调整为请求的类型,但返回一个boolean。Lookup.findGetter(Class<?> refc, String name, Class<?> type) static MethodHandleLookup.findOwnSpecial(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes) 给定一个查找,使用Lookup.findSpecial(Class, String, MethodType)查找该查找类的方法。Lookup.findOwnSpecial(String name, Class<?> rtype, Class<?>... ptypes) 使用Lookup.findSpecial(Class, String, MethodType)查找该查找类的方法。static MethodHandleLookup.findOwnStatic(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes) 给定一个查找,使用Lookup.findStatic(Class, String, MethodType)查找该查找类的方法。Lookup.findOwnStatic(String name, Class<?> rtype, Class<?>... ptypes) 使用Lookup.findStatic(Class, String, MethodType)查找该查找类的方法。Lookup.findSpecial(Class<?> declaringClass, String name, MethodType type) Lookup.findStatic(Class<?> declaringClass, String name, MethodType type) Lookup.findVirtual(Class<?> declaringClass, String name, MethodType type) static MethodHandleGuards.getClassGuard(Class<?> clazz) 创建一个保护方法来测试其唯一参数是否属于特定的类。static MethodHandleGuards.getIdentityGuard(Object obj) 创建一个保护方法,测试其唯一参数是否与另一个对象在引用上相同static MethodHandleGuards.getInstanceOfGuard(Class<?> clazz) 创建一个保护方法,测试其唯一参数是否为特定类的实例。static MethodHandleGuards.isArray(int pos, MethodType type) 如果指定位置的参数是 Java 数组,则创建一个返回 true 的方法句柄。static MethodHandleGuards.isInstance(Class<?> clazz, int pos, MethodType type) 使用指定类型的参数创建方法句柄,但返回boolean。static MethodHandleGuards.isInstance(Class<?> clazz, MethodType type) 使用指定类型的参数创建方法句柄,但返回boolean。static MethodHandleGuards.isNotNull()返回一个测试第一个参数是否不为 null 的守卫。static MethodHandleGuards.isNull()返回一个测试第一个参数是否为 null 的守卫。static MethodHandleGuards.isOfClass(Class<?> clazz, MethodType type) 使用指定类型的参数创建一个守卫方法句柄,但返回boolean。DefaultInternalObjectFilter.transform(MethodHandle target) static MethodHandleLookup.unreflect(MethodHandles.Lookup lookup, Method m) static MethodHandleLookup.unreflectConstructor(MethodHandles.Lookup lookup, Constructor<?> c) Lookup.unreflectConstructor(Constructor<?> c) Lookup.unreflectGetter(Field f) Lookup.unreflectSetter(Field f) jdk.dynalink.linker.support 中的方法,参数类型为 MethodHandle修饰符和类型方法描述static MethodHandleGuards.asType(MethodHandle test, MethodType type) 获取一个旨在用作守卫的方法句柄,并将其调整为请求的类型,但返回一个boolean。static MethodHandleGuards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type) 获取一个旨在用作守卫的方法句柄,并将其调整为请求的类型,但返回一个boolean。DefaultInternalObjectFilter.transform(MethodHandle target) jdk.dynalink.linker.support 中的构造函数,参数类型为 MethodHandle修饰符构造方法描述DefaultInternalObjectFilter(MethodHandle parameterFilter, MethodHandle returnFilter) 创建一个新的过滤器。 -
MethodHandle 在 jdk.dynalink.support 中的用法
jdk.dynalink.support 中的方法,参数类型为 MethodHandle修饰符和类型方法描述voidAbstractRelinkableCallSite.initialize(MethodHandle relinkAndInvoke) voidChainedCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) voidSimpleRelinkableCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) voidChainedCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) voidSimpleRelinkableCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)