次の方法で共有


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)していますが、折りたたみが行われるパラメーター リスト内の位置を制御できます。 これを制御する引数は、 pos0 から始まるインデックスです。 前述の方法 #foldArguments(MethodHandle, MethodHandle) は、位置 0 を前提としています。

9 に追加されました。

の Java ドキュメントjava.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle)

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

適用対象

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>例:</b><ブロッククォート>

{@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は、折りたたみ位置Vの前にあるパラメーターと引数のtarget型と値を表します。また、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 ドキュメントjava.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

適用対象