MethodHandles.SpreadInvoker(MethodType, Int32) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定した typeの任意のメソッド ハンドルを呼び出すメソッド ハンドルを生成し、指定された数の末尾の引数を 1 つの末尾の 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の任意のメソッド ハンドルを呼び出すメソッド ハンドルを生成し、指定された数の末尾の引数を 1 つの末尾の Object[] 配列に置き換えます。 結果の呼び出し側は、次の引数を持つメソッド ハンドルになります。 <ul><li>a MethodHandle ターゲット <li>zero 以上の先行値 ( leadingArgCount でカウント) <li>末尾の引数を含む Object[] 配列 </ul>
呼び出し側は、指定されたtypeでMethodHandle#invoke invokeする呼び出しのようにターゲットを呼び出します。 つまり、ターゲットが指定されたtypeとまったく同じ場合は、invokeExactのように動作します。それ以外の場合は、ターゲットを必要なtypeに変換するためにMethodHandle#asType asTypeが使用されているかのように動作します。
返される呼び出し元の型は、指定された typeではなく、最初の leadingArgCount を除くすべてのパラメーターを、最後のパラメーターとなる Object[]型の 1 つの配列に置き換えます。
ターゲットを呼び出す前に、呼び出し元は最終的な配列を分散し、必要に応じて参照キャストを適用し、プリミティブ引数のボックス化と拡大を解除します。 呼び出し元が呼び出されたときに、指定された配列引数に正しい数の要素がない場合、呼び出し元はターゲットを呼び出す代わりに IllegalArgumentException をスローします。
このメソッドは、次のコードと同じです (ただし、より効率的な場合があります): <blockquote>
{@code
MethodHandle invoker = MethodHandles.invoker(type);
int spreadArgCount = type.parameterCount() - leadingArgCount;
invoker = invoker.asSpreader(Object[].class, spreadArgCount);
return invoker;
}
</blockquote> このメソッドは、反射例外やセキュリティ例外をスローしません。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。