語言

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[]

一個控制重新排序的索引陣列

傳回

一個方法代柄,在目標丟棄未使用的參數並移動及/或複製其他參數後,會委派給目標

屬性

備註

產生一個方法代柄,透過重新排序參數,將所給方法代言的呼叫序列調整為新型態。 所得的方法處理件保證會回報與所需新型別相等的型別。

給定的陣列控制重新排序。 呼叫 #I 輸入參數的數量(值, newType.parameterCount()),並呼叫 #O 出出參數的數量(值 target.type().parameterCount())。 則重排序陣列的長度必須為 #O,且每個元素必須是小 #I於 的非負數。 對於每一個 N 小於 #O的 , N第 n 個出函參數將取自 I第 n 個入門參數,其中 I 為 reorder[N]。

不套用參數或返回值轉換。 每個 newType由 決定的輸入參數類型必須與目標方法處理中對應的輸出參數類型相同。 回 newType 傳類型必須與原始目標的回傳類型相同。

重排序陣列不必指定實際的排列。 若一個輸入參數的索引在陣列中出現多於一次,則會被重複;若該參數的索引未出現在陣列中,則會被丟棄。 如同 , #dropArguments(MethodHandle,int,List) dropArguments未在重排序陣列中提及的輸入參數可為任意類型,僅由 newType決定。 <引用>

{@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);
            }

</區塊引用>

的 java.lang.invoke.MethodHandles.permuteArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, int...)Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於