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小さいごとにNN-th の出力引数は、-th の受信引数からI取得されます。ここでI、 は reorder[N]です。

引数または戻り値の変換は適用されません。 によって決定される 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.lang.invoke.MethodHandles.permuteArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, int...)Java ドキュメント。

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

適用対象