MethodHandles.FoldArguments メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オーバーロード
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 に追加されました。
このページの一部は、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 メソッド ハンドルになることはありません。
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。