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
Barbara Streisandasal
2024-12-20 16:54:151066semak imbas

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

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;
}

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

void foo (CheckedFunction f) { ... }
  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);
    }
}

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

Function<String, Integer> f = (String t) -> myWrappedMethod(t);
  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);
        }
    };

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!

Kenyataan:
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