Share via


MethodHandles.SpreadInvoker(MethodType, Int32) メソッド

定義

指定 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 1 つのMethodHandleターゲット <li>0 以上の先頭の値 (でleadingArgCountカウント) <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)

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

適用対象