MethodHandles.SpreadInvoker(MethodType, Int32) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
生成一个方法句柄,该方法句柄将调用给定 type的任何方法句柄,给定数量的尾随参数被单个尾随 Object[] 数组替换。
[Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? SpreadInvoker(Java.Lang.Invoke.MethodType? type, int leadingArgCount);
[<Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member SpreadInvoker : Java.Lang.Invoke.MethodType * int -> Java.Lang.Invoke.MethodHandle
参数
- type
- MethodType
所需的目标类型
- leadingArgCount
- Int32
固定参数数,要保持不变传递给目标
返回
适用于调用给定类型的任何方法句柄的方法句柄
- 属性
注解
生成一个方法句柄,该方法句柄将调用给定 type的任何方法句柄,给定数量的尾随参数被单个尾随 Object[] 数组替换。 生成的调用程序将是具有以下参数的方法句柄:<ul<>li a single MethodHandle target <li>>zero 或 more leading values (counted byleadingArgCount) <li>一个Object[]包含尾随参数 /ul 的<数组>
调用方将调用其目标,例如调用所指示type的调用MethodHandle#invoke invoke。 也就是说,如果目标正好是给定type的,则其行为将类似invokeExact;否则,它的行为就像用于将目标转换为所需type对象一样MethodHandle#asType asType。
返回的调用程序的类型不是给定 type的,而是具有除第一 leadingArgCount 个类型 Object[]数组(即最终参数)以外的所有参数。
在调用其目标之前,调用程序将分散最终数组,根据需要应用引用强制转换,并取消装箱和扩大基元参数。 如果调用调用者时,提供的数组参数没有正确的元素数,则调用程序将引发而不是 IllegalArgumentException 调用目标。
此方法等效于以下代码(尽管可能更高效): <blockquote>
{@code
MethodHandle invoker = MethodHandles.invoker(type);
int spreadArgCount = type.parameterCount() - leadingArgCount;
invoker = invoker.asSpreader(Object[].class, spreadArgCount);
return invoker;
}
</blockquote> 此方法不引发反射或安全异常。
Java文档java.lang.invoke.MethodHandles.spreadInvoker(java.lang.invoke.MethodType, int)。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。