Java 8 で例外処理を行う Lambda 関数
Lambda 式を使用すると、簡潔で洗練されたコードが可能になりますが、チェック例外のサポートがありません。この制限により、例外をスローするメソッドを操作するときに問題が生じます。
次の例を考えてみましょう:
Integer myMethod(String s) throws IOException
このメソッドへのラムダ参照はどのように定義できますか?
解決策はシナリオによって異なります。
を定義します。チェック例外を含むカスタム関数インターフェイス:
コードを制御できる場合は、チェック例外を宣言するカスタム関数インターフェイスを作成できます:
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
次に、これを使用します。コード内のインターフェイス:
void foo(CheckedFunction<String, Integer> f) { ... }
をラップします。例外なしバージョンのメソッド:
メソッドを変更できない場合は、チェック例外を宣言しない新しいメソッドでラップします:
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch (IOException e) { throw new UncheckedIOException(e); } }
次に、ラムダ参照:
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
または、curly で囲まれたラムダ式を使用できます。 braces:
Function<String, Integer> f = (String t) -> { try { return myMethod(t); } catch (IOException e) { throw new UncheckedIOException(e); } };
これらのテクニックを理解することで、Java 8 でラムダ関数を使用するときにチェック例外を効果的に処理できます。
以上がJava 8 Lambda 関数でチェックされた例外を処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。