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