MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
引数を並べ替えることで、指定されたメソッド ハンドルの呼び出しシーケンスを新しい型に適応させるメソッド ハンドルを生成します。
[Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? PermuteArguments (Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodType? newType, params int[]? reorder);
[<Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member PermuteArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodType * int[] -> Java.Lang.Invoke.MethodHandle
パラメーター
- target
- MethodHandle
引数の順序が変更された後に呼び出すメソッド ハンドル
- newType
- MethodType
新しいメソッド ハンドルの予期される型
- reorder
- Int32[]
並べ替えを制御するインデックス配列
戻り値
使用されていない引数を削除し、他の引数を移動または複製した後にターゲットにデリゲートするメソッドハンドル
- 属性
注釈
引数を並べ替えることで、指定されたメソッド ハンドルの呼び出しシーケンスを新しい型に適応させるメソッド ハンドルを生成します。 結果のメソッド ハンドルは、目的の新しい型と等しい型を報告することが保証されます。
指定された配列は並べ替えを制御します。 受信パラメーターの数 (値newType.parameterCount()
) を呼び出#I
し、送信パラメーターの数 (値target.type().parameterCount()
) を呼び出#O
します。 次に、並べ替える配列 #O
の長さを指定し、各要素を負以外の値にする #I
必要があります。 より#O
小さいすべてのN
場合、N
-th の出力引数は -reorder[N]
I
th の受信引数からI
取得されます。
引数または戻り値の変換は適用されません。 各入力引数の型は、決定に応 newType
じて、ターゲット メソッド ハンドル内の対応する送信パラメーターまたはパラメーターの型と同じである必要があります。 戻り値の型は、元の newType
ターゲットの戻り値の型と同じである必要があります。
並べ替え配列では、実際の順列を指定する必要はありません。 配列内にインデックスが複数回出現する場合は、入力引数が重複し、配列にインデックスが表示されない場合は、受信引数が削除されます。 の場合 #dropArguments(MethodHandle,int,List) dropArguments
と同様に、並べ替え配列に記載されていない受信引数は、任意の型であり得る。によって newType
のみ決定される。 <blockquote>
{@code
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
...
MethodType intfn1 = methodType(int.class, int.class);
MethodType intfn2 = methodType(int.class, int.class, int.class);
MethodHandle sub = ... (int x, int y) -> (x-y) ...;
assert(sub.type().equals(intfn2));
MethodHandle sub1 = permuteArguments(sub, intfn2, 0, 1);
MethodHandle rsub = permuteArguments(sub, intfn2, 1, 0);
assert((int)rsub.invokeExact(1, 100) == 99);
MethodHandle add = ... (int x, int y) -> (x+y) ...;
assert(add.type().equals(intfn2));
MethodHandle twice = permuteArguments(add, intfn1, 0, 0);
assert(twice.type().equals(intfn1));
assert((int)twice.invokeExact(21) == 42);
}
</blockquote>
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。