MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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>
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.