Bagikan melalui


MethodHandles.FoldArguments Metode

Definisi

Overload

FoldArguments(MethodHandle, Int32, MethodHandle)

Mengadaptasi handel metode target dengan melakukan pra-pemrosesan beberapa argumennya, dimulai pada posisi tertentu, lalu memanggil target dengan hasil pra-pemrosesan, dimasukkan ke dalam urutan asli argumen tepat sebelum argumen terlipat.

FoldArguments(MethodHandle, MethodHandle)

Mengadaptasi handel metode target dengan melakukan pra-pemrosesan beberapa argumennya, lalu memanggil target dengan hasil pra-pemrosesan, dimasukkan ke dalam urutan asli argumen.

FoldArguments(MethodHandle, Int32, MethodHandle)

Mengadaptasi handel metode target dengan melakukan pra-pemrosesan beberapa argumennya, dimulai pada posisi tertentu, lalu memanggil target dengan hasil pra-pemrosesan, dimasukkan ke dalam urutan asli argumen tepat sebelum argumen terlipat.

[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments(Java.Lang.Invoke.MethodHandle? target, int pos, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * int * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

Parameter

target
MethodHandle

handel metode untuk dipanggil setelah argumen digabungkan

pos
Int32

posisi untuk mulai melipat dan di mana memasukkan hasil lipatan; jika ini adalah 0, efeknya sama seperti untuk #foldArguments(MethodHandle, MethodHandle).

combiner
MethodHandle

handel metode untuk memanggil awalnya pada argumen masuk

Mengembalikan

handel metode yang menggabungkan logika pelipatan argumen yang ditentukan

Atribut

Keterangan

Mengadaptasi handel metode target dengan melakukan pra-pemrosesan beberapa argumennya, dimulai pada posisi tertentu, lalu memanggil target dengan hasil pra-pemrosesan, dimasukkan ke dalam urutan asli argumen tepat sebelum argumen terlipat.

Metode ini terkait #foldArguments(MethodHandle, MethodHandle)erat dengan , tetapi memungkinkan untuk mengontrol posisi dalam daftar parameter tempat pelipatan terjadi. Argumen yang mengontrol ini, pos, adalah indeks berbasis nol. Metode tersebut #foldArguments(MethodHandle, MethodHandle) mengasumsikan posisi 0.

Ditambahkan dalam 9.

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

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

FoldArguments(MethodHandle, MethodHandle)

Mengadaptasi handel metode target dengan melakukan pra-pemrosesan beberapa argumennya, lalu memanggil target dengan hasil pra-pemrosesan, dimasukkan ke dalam urutan asli argumen.

[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments(Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

Parameter

target
MethodHandle

handel metode untuk dipanggil setelah argumen digabungkan

combiner
MethodHandle

handel metode untuk memanggil awalnya pada argumen masuk

Mengembalikan

handel metode yang menggabungkan logika pelipatan argumen yang ditentukan

Atribut

Keterangan

Mengadaptasi handel metode target dengan melakukan pra-pemrosesan beberapa argumennya, lalu memanggil target dengan hasil pra-pemrosesan, dimasukkan ke dalam urutan asli argumen.

Pra-pemrosesan dilakukan oleh combiner, handel metode kedua. Dari argumen yang diteruskan ke adaptor, argumen pertama N disalin ke combiner, yang kemudian dipanggil. (Di sini, N didefinisikan sebagai jumlah parameter combiner.) Setelah ini, kontrol lolos ke target, dengan hasil apa pun dari combiner yang disisipkan sebelum argumen masuk asli N .

Jika combiner mengembalikan nilai, jenis parameter pertama target harus identik dengan jenis pengembalian combiner, dan jenis parameter target berikutnya N harus sama persis dengan parameter combiner.

Jika combiner memiliki pengembalian yang batal, tidak ada hasil yang akan dimasukkan, dan jenis parameter pertama N dari target harus sama persis dengan parameter combiner.

Adaptor yang dihasilkan adalah jenis yang sama dengan target, kecuali bahwa jenis parameter pertama dihilangkan, jika sesuai dengan hasil combiner.

(Perhatikan bahwa #dropArguments(MethodHandle,int,List) dropArguments dapat digunakan untuk menghapus argumen apa pun yang tidak ingin diterima oleh combiner atau target. Jika beberapa argumen masuk ditujukan hanya untuk combiner, pertimbangkan untuk menggunakan MethodHandle#asCollector asCollector sebagai gantinya, karena argumen tersebut tidak perlu ditayangkan pada tumpukan pada entri ke target.)

<b>Contoh:</b><blockquote>

{@code
            import static java.lang.invoke.MethodHandles.*;
            import static java.lang.invoke.MethodType.*;
            ...
            MethodHandle trace = publicLookup().findVirtual(java.io.PrintStream.class,
              "println", methodType(void.class, String.class))
                .bindTo(System.out);
            MethodHandle cat = lookup().findVirtual(String.class,
              "concat", methodType(String.class, String.class));
            assertEquals("boojum", (String) cat.invokeExact("boo", "jum"));
            MethodHandle catTrace = foldArguments(cat, trace);
            // also prints "boo":
            assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
            }

</blockquote>

Berikut adalah pseudocode untuk adaptor yang dihasilkan. Dalam kode, T mewakili jenis target hasil adaptor dan yang dihasilkan. V/v mewakili jenis dan nilai parameter dan argumen target yang mendahului posisi lipatan; V juga merupakan jenis hasil dari combiner. A/a menunjukkan jenis dan nilai N parameter dan argumen pada posisi lipatan. B/b mewakili jenis dan nilai target parameter dan argumen yang mengikuti parameter dan argumen yang dilipat. <blockquote>

{@code
            // there are N arguments in A...
            T target(V, A[N]..., B...);
            V combiner(A...);
            T adapter(A... a, B... b) {
              V v = combiner(a...);
              return target(v, a..., b...);
            }
            // and if the combiner has a void return:
            T target2(A[N]..., B...);
            void combiner2(A...);
            T adapter2(A... a, B... b) {
              combiner2(a...);
              return target2(a..., b...);
            }
            }

</blockquote>

<em>Catatan:</em> Adaptor yang dihasilkan tidak pernah merupakan metode methodHandle#asVarargsCollector variable-arity, bahkan jika handel metode target asli adalah.

Dokumentasi Java untuk java.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

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