次の方法で共有


MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) メソッド

定義

引数を並べ替えることで、指定されたメソッド ハンドルの呼び出しシーケンスを新しい型に適応させるメソッド ハンドルを生成します。

[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]Ith の受信引数から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>

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

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

適用対象