Bagikan melalui


MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) Metode

Definisi

Menghasilkan handel metode yang mengadaptasi urutan panggilan dari handel metode yang diberikan ke jenis baru, dengan menyusun ulang argumen.

[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

Parameter

target
MethodHandle

handel metode untuk dipanggil setelah argumen diurutkan ulang

newType
MethodType

jenis yang diharapkan dari handel metode baru

reorder
Int32[]

array indeks yang mengontrol pengulangan

Mengembalikan

handel metode yang mendelegasikan ke target setelah menjatuhkan argumen yang tidak digunakan dan memindahkan dan/atau menduplikasi argumen lain

Atribut

Keterangan

Menghasilkan handel metode yang mengadaptasi urutan panggilan dari handel metode yang diberikan ke jenis baru, dengan menyusun ulang argumen. Handel metode yang dihasilkan dijamin untuk melaporkan jenis yang sama dengan jenis baru yang diinginkan.

Array yang diberikan mengontrol pengulangan. Panggil #I jumlah parameter masuk (nilai newType.parameterCount(), dan panggil #O jumlah parameter keluar (nilai target.type().parameterCount()). Kemudian panjang array pengurutan ulang harus #O, dan setiap elemen harus berupa angka non-negatif kurang dari #I. Untuk setiap N kurang dari #O, Nargumen keluar -th akan diambil dari Iargumen masuk -th, di mana I adalah reorder[N].

Tidak ada konversi nilai argumen atau pengembalian yang diterapkan. Jenis setiap argumen masuk, seperti yang ditentukan oleh , harus identik dengan newTypejenis parameter keluar atau parameter yang sesuai dalam handel metode target. Jenis newType pengembalian harus identik dengan jenis pengembalian target asli.

Array susun ulang tidak perlu menentukan permutasi aktual. Argumen masuk akan diduplikasi jika indeksnya muncul lebih dari sekali dalam array, dan argumen masuk akan dihilangkan jika indeksnya tidak muncul dalam array. Seperti dalam kasus #dropArguments(MethodHandle,int,List) dropArguments, argumen masuk yang tidak disebutkan dalam array susun ulang mungkin jenis apa pun, seperti yang ditentukan hanya oleh 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>

Dokumentasi Java untuk java.lang.invoke.MethodHandles.permuteArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, int...).

Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.

Berlaku untuk