Java 8 の Lambda 関数と例外処理
Java 8 では、ラムダ関数は関数型を定義するための簡潔な構文を提供します。ただし、チェック例外をスローする可能性があるラムダ関数を扱うときに、一般的な問題が発生します。
IOException をスローする次のラムダ関数を考えてみましょう:
Integer myMethod(String s) throws IOException
これへの参照を作成しようとしています標準の Function インターフェイスを使用するメソッドを使用すると、コンパイル エラーが発生します。これは、Function インターフェイスがチェック例外を宣言していないため、myMethod などのメソッドと互換性がなくなるためです。
この問題に対処するには、いくつかのオプションがあります。
コードが制御下にある場合は、カスタム関数インターフェイスを定義できます。これはチェック例外を明示的に宣言します。例:
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
このカスタム インターフェイスを使用して myMethod を参照できます:
void foo (CheckedFunction f) { ... }
あるいは、チェック例外をスローしない新しいメソッドで 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);
最後のオプションとして、明示的に処理するラムダ関数本体を定義できます。チェックされた例外。例:
Function<String, Integer> f = (String t) -> { try { return myMethod(t); } catch(IOException e) { throw new UncheckedIOException(e); } };
以上がJava 8 Lambda 関数でチェックされた例外を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。