MethodHandles.CatchException(MethodHandle, Class, MethodHandle) 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.
Membuat handel metode yang mengadaptasi handel metode target, dengan menjalankannya di dalam handler pengecualian.
[Android.Runtime.Register("catchException", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? CatchException(Java.Lang.Invoke.MethodHandle? target, Java.Lang.Class? exType, Java.Lang.Invoke.MethodHandle? handler);
[<Android.Runtime.Register("catchException", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member CatchException : Java.Lang.Invoke.MethodHandle * Java.Lang.Class * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
Parameter
- target
- MethodHandle
handel metode untuk memanggil
- exType
- Class
jenis pengecualian yang akan ditangkap oleh handler
- handler
- MethodHandle
handel metode untuk memanggil jika pengecualian yang cocok dilemparkan
Mengembalikan
handel metode yang menggabungkan logika try/catch yang ditentukan
- Atribut
Keterangan
Membuat handel metode yang mengadaptasi handel metode target, dengan menjalankannya di dalam handler pengecualian. Jika target kembali normal, adaptor mengembalikan nilai tersebut. Jika pengecualian yang cocok dengan jenis yang ditentukan dilemparkan, handel fallback dipanggil sebagai gantinya pada pengecualian, ditambah argumen asli.
Target dan handler harus memiliki argumen dan jenis pengembalian yang sesuai yang sama, kecuali bahwa handler dapat menghilangkan argumen berikutnya (mirip dengan predikat di #guardWithTest guardWithTest). Selain itu, handler harus memiliki parameter exType terkemuka ekstra atau supertype.
Berikut adalah pseudocode untuk adaptor yang dihasilkan. Dalam kode, T mewakili jenis pengembalian dan target handler, dan yang sesuai dengan adaptor yang dihasilkan;/Aa , jenis dan nilai argumen ke handel yang dihasilkan yang dikonsumsi oleh handler; dan/Bb , argumen ke handel yang dihasilkan dibuang oleh .handler <blockquote>
{@code
T target(A..., B...);
T handler(ExType, A...);
T adapter(A... a, B... b) {
try {
return target(a..., b...);
} catch (ExType ex) {
return handler(ex, a...);
}
}
}
</blockquote> Perhatikan bahwa argumen tersimpan (a... dalam pseudocode) tidak dapat dimodifikasi dengan eksekusi target, sehingga diteruskan tidak berubah dari pemanggil ke handler, jika handler dipanggil.
Target dan handler harus mengembalikan jenis yang sama, bahkan jika handler selalu melempar. (Ini mungkin terjadi, misalnya, karena handler mensimulasikan finally klausul). Untuk membuat handler pelemparan seperti itu, buat logika pembuatan handler dengan #throwException throwException, untuk membuat handel metode dari jenis pengembalian yang benar.
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.