Fungsi Lambda dengan Pengendalian Pengecualian dalam Java 8
Ekspresi Lambda mendayakan kod ringkas dan elegan, tetapi mereka tidak mempunyai sokongan untuk pengecualian yang diperiksa. Had ini menimbulkan cabaran apabila menggunakan kaedah yang membuang pengecualian.
Pertimbangkan contoh berikut:
Integer myMethod(String s) throws IOException
Bagaimanakah anda boleh mentakrifkan rujukan lambda kepada kaedah ini?
Penyelesaiannya bergantung pada senario:
Tentukan a Antara Muka Fungsi Tersuai dengan Pengecualian Ditanda:
Jika anda mempunyai kawalan ke atas kod, anda boleh mencipta antara muka fungsi tersuai yang mengisytiharkan pengecualian yang diperiksa:
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
Kemudian, gunakan ini antara muka dalam kod anda:
void foo(CheckedFunction<String, Integer> f) { ... }
Balutkan Kaedah dalam Tanpa Pengecualian Versi:
Jika anda tidak boleh mengubah suai kaedah, bungkusnya dengan kaedah baharu yang tidak mengisytiharkan pengecualian yang ditandai:
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch (IOException e) { throw new UncheckedIOException(e); } }
Kemudian, buat rujukan lambda:
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
Sebagai alternatif, anda boleh menggunakan ungkapan lambda yang disertakan dalam kerinting pendakap:
Function<String, Integer> f = (String t) -> { try { return myMethod(t); } catch (IOException e) { throw new UncheckedIOException(e); } };
Dengan memahami teknik ini, anda boleh mengendalikan pengecualian yang disemak dengan berkesan semasa menggunakan fungsi lambda dalam Java 8.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Pengecualian yang Diperiksa dalam Fungsi Java 8 Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!