Language

MethodHandles.FoldArguments メソッド

定義

オーバーロード

名前 説明
FoldArguments(MethodHandle, Int32, MethodHandle)

引数の一部を事前処理し、指定した位置から開始し、事前処理の結果を使用してターゲットを呼び出し、折りたたまれた引数の直前にある元の引数シーケンスに挿入することで、ターゲット メソッド ハンドルを調整します。

FoldArguments(MethodHandle, MethodHandle)

一部の引数を前処理し、前処理の結果を使用してターゲットを呼び出し、元の一連の引数に挿入することで、ターゲット メソッド ハンドルを調整します。

FoldArguments(MethodHandle, Int32, MethodHandle)

引数の一部を事前処理し、指定した位置から開始し、事前処理の結果を使用してターゲットを呼び出し、折りたたまれた引数の直前にある元の引数シーケンスに挿入することで、ターゲット メソッド ハンドルを調整します。

[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments(Java.Lang.Invoke.MethodHandle? target, int pos, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * int * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

パラメーター

target
MethodHandle

引数の結合後に呼び出すメソッド ハンドル

pos
Int32

折りたたみを開始し、折りたたみ結果を挿入する位置。これが 0の場合、効果は #foldArguments(MethodHandle, MethodHandle)の場合と同じです。

combiner
MethodHandle

着信引数で最初に呼び出すメソッド ハンドル

返品

指定された引数の折りたたみロジックを組み込むメソッド ハンドル

属性

注釈

引数の一部を事前処理し、指定した位置から開始し、事前処理の結果を使用してターゲットを呼び出し、折りたたまれた引数の直前にある元の引数シーケンスに挿入することで、ターゲット メソッド ハンドルを調整します。

このメソッドは #foldArguments(MethodHandle, MethodHandle)と密接に関連していますが、折りたたみが行われるパラメーター リスト内の位置を制御できます。 これを制御する引数 ( pos) は、0 から始まるインデックスです。 前述の方法 #foldArguments(MethodHandle, MethodHandle) 位置 0 を想定しています。

9 に追加されました。

Javaドキュメント。

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

適用対象

FoldArguments(MethodHandle, MethodHandle)

一部の引数を前処理し、前処理の結果を使用してターゲットを呼び出し、元の一連の引数に挿入することで、ターゲット メソッド ハンドルを調整します。

[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments(Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

パラメーター

target
MethodHandle

引数の結合後に呼び出すメソッド ハンドル

combiner
MethodHandle

着信引数で最初に呼び出すメソッド ハンドル

返品

指定された引数の折りたたみロジックを組み込むメソッド ハンドル

属性

注釈

一部の引数を前処理し、前処理の結果を使用してターゲットを呼び出し、元の一連の引数に挿入することで、ターゲット メソッド ハンドルを調整します。

前処理は、2 番目のメソッド ハンドルである combiner によって実行されます。 アダプターに渡される引数のうち、最初の N 引数がコンバイナーにコピーされ、その後呼び出されます。 (ここでは、 N はコンバイナーのパラメーター数として定義されます)。その後、元の N の入力引数の前に挿入されたコンバイナーの結果を使用して、コントロールがターゲットに渡されます。

コンバイナーが値を返す場合、ターゲットの最初のパラメーター型はコンバイナーの戻り値の型と同じである必要があり、ターゲットの次の N パラメーター型はコンバイナーのパラメーターと完全に一致する必要があります。

コンバイナーに void 戻り値がある場合、結果は挿入されません。ターゲットの最初の N パラメーター型はコンバイナーのパラメーターと完全に一致する必要があります。

結果のアダプターは、コンバイナーの結果に対応する場合、最初のパラメーター型が削除されることを除き、ターゲットと同じ型になります。

( #dropArguments(MethodHandle,int,List) dropArguments を使用して、コンバイナーまたはターゲットが受け取らない引数を削除できます。受信引数の一部がコンバイナーのみを対象とする場合は、代わりに MethodHandle#asCollector asCollector を使用することを検討してください。これらの引数は、ターゲットへのエントリ時にスタック上に存在する必要がないためです)。

<b>Example:</b><blockquote>

{@code
            import static java.lang.invoke.MethodHandles.*;
            import static java.lang.invoke.MethodType.*;
            ...
            MethodHandle trace = publicLookup().findVirtual(java.io.PrintStream.class,
              "println", methodType(void.class, String.class))
                .bindTo(System.out);
            MethodHandle cat = lookup().findVirtual(String.class,
              "concat", methodType(String.class, String.class));
            assertEquals("boojum", (String) cat.invokeExact("boo", "jum"));
            MethodHandle catTrace = foldArguments(cat, trace);
            // also prints "boo":
            assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
            }

</blockquote>

結果のアダプターの擬似コードを次に示します。 コードでは、 T は target の結果の種類と結果のアダプターを表します。 V / v は、折りたたみ位置の前にある target のパラメーターと引数の型と値を表します。 V は、 combinerの結果の型でもあります。 A / a は、折りたたみ位置にある N パラメーターと引数の型と値を表します。 B / b は、フォールドされたパラメーターと引数に続く target パラメーターと引数の型と値を表します。 <blockquote>

{@code
            // there are N arguments in A...
            T target(V, A[N]..., B...);
            V combiner(A...);
            T adapter(A... a, B... b) {
              V v = combiner(a...);
              return target(v, a..., b...);
            }
            // and if the combiner has a void return:
            T target2(A[N]..., B...);
            void combiner2(A...);
            T adapter2(A... a, B... b) {
              combiner2(a...);
              return target2(a..., b...);
            }
            }

</blockquote>

<em>Note:</em> 元のターゲット メソッド ハンドルが含まれている場合でも、結果のアダプターは MethodHandle#asVarargsCollector variable-arity メソッド ハンドルになることはありません。

Javaドキュメント。

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

適用対象