ホームページ >Java >&#&チュートリアル >Java 8 Lambda 関数でチェックされた例外を処理するにはどうすればよいですか?

Java 8 Lambda 関数でチェックされた例外を処理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-20 16:54:151083ブラウズ

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

Java 8 の Lambda 関数と例外処理

Java 8 では、ラムダ関数は関数型を定義するための簡潔な構文を提供します。ただし、チェック例外をスローする可能性があるラムダ関数を扱うときに、一般的な問題が発生します。

IOException をスローする次のラムダ関数を考えてみましょう:

Integer myMethod(String s) throws IOException

これへの参照を作成しようとしています標準の Function インターフェイスを使用するメソッドを使用すると、コンパイル エラーが発生します。これは、Function インターフェイスがチェック例外を宣言していないため、myMethod などのメソッドと互換性がなくなるためです。

この問題に対処するには、いくつかのオプションがあります。

  1. Defineカスタム関数インターフェイス:

コードが制御下にある場合は、カスタム関数インターフェイスを定義できます。これはチェック例外を明示的に宣言します。例:

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

このカスタム インターフェイスを使用して myMethod を参照できます:

void foo (CheckedFunction f) { ... }
  1. メソッドをラップします:

あるいは、チェック例外をスローしない新しいメソッドで myMethod をラップすることもできます。例:

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

これで、関数インターフェイスを使用してこのラップされたメソッドを参照できます:

Function<String, Integer> f = (String t) -> myWrappedMethod(t);
  1. 例外を処理する Lambda 本体:

最後のオプションとして、明示的に処理するラムダ関数本体を定義できます。チェックされた例外。例:

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

以上がJava 8 Lambda 関数でチェックされた例外を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。