Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mengendalikan Pengecualian yang Diperiksa dalam Fungsi Java 8 Lambda?

Bagaimanakah Saya Boleh Mengendalikan Pengecualian yang Diperiksa dalam Fungsi Java 8 Lambda?

Barbara Streisand
Lepaskan: 2024-12-20 16:54:15
asal
1069 orang telah melayarinya

How Can I Handle Checked Exceptions in Java 8 Lambda Functions?

Fungsi Lambda dan Pengendalian Pengecualian dalam Java 8

Dalam Java 8, fungsi lambda menyediakan sintaks ringkas untuk menentukan jenis fungsi. Walau bagaimanapun, isu biasa timbul apabila berurusan dengan fungsi lambda yang berpotensi membuang pengecualian yang telah diperiksa.

Pertimbangkan fungsi lambda berikut yang membuang IOException:

Integer myMethod(String s) throws IOException
Salin selepas log masuk

Percubaan untuk membuat rujukan kepada ini kaedah menggunakan antara muka Fungsi standard akan mengakibatkan ralat penyusunan. Ini kerana antara muka Fungsi tidak mengisytiharkan sebarang pengecualian yang diperiksa, menjadikannya tidak serasi dengan kaedah seperti myMethod.

Untuk menangani isu ini, kami mempunyai beberapa pilihan:

  1. Tentukan Antara Muka Fungsi Tersuai:

Jika kod berada di bawah kawalan anda, anda boleh mentakrifkan tersuai antara muka berfungsi yang secara eksplisit mengisytiharkan pengecualian yang diperiksa. Contohnya:

@FunctionalInterface
public interface CheckedFunction<T, R> {
   R apply(T t) throws IOException;
}
Salin selepas log masuk

Anda kemudian boleh menggunakan antara muka tersuai ini untuk merujuk myMethod:

void foo (CheckedFunction f) { ... }
Salin selepas log masuk
  1. Balut Kaedah:

Sebagai alternatif, anda boleh membungkus myMethod dalam kaedah baharu yang tidak membuang pengecualian yang ditandakan. Contohnya:

public Integer myWrappedMethod(String s) {
    try {
        return myMethod(s);
    }
    catch(IOException e) {
        throw new UncheckedIOException(e);
    }
}
Salin selepas log masuk

Sekarang, anda boleh merujuk kaedah yang dibalut ini menggunakan antara muka Fungsi:

Function<String, Integer> f = (String t) -> myWrappedMethod(t);
Salin selepas log masuk
  1. Lambda Body Yang Mengendalikan Pengecualian:

Sebagai pilihan terakhir, anda boleh menentukan badan fungsi lambda yang secara eksplisit mengendalikan pengecualian yang diperiksa. Contohnya:

Function<String, Integer> f =
    (String t) -> {
        try {
           return myMethod(t);
        }
        catch(IOException e) {
            throw new UncheckedIOException(e);
        }
    };
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Pengecualian yang Diperiksa dalam Fungsi Java 8 Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan