Language

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>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> このメソッドは、反射例外やセキュリティ例外をスローしません。

Javaドキュメント。

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

適用対象