Java 8 では、ラムダ式によりメソッド参照を表す簡潔な方法が提供されます。ただし、チェック例外をスローする可能性のあるメソッドに遭遇すると、デフォルトのラムダ構文では不十分になります。
次のメソッドを検討してください:
Integer myMethod(String s) throws IOException
構文 Function
この問題を解決するには、いくつかのアプローチが利用可能です。
1.カスタム関数インターフェイスを定義します:
メソッドが制御下にある場合は、チェック例外を宣言するカスタム関数インターフェイスを定義することをお勧めします:
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
このインターフェイスは次のようになります。ラムダ型として使用されます:
void foo (CheckedFunction<String, Integer> f) { ... }
2.元のメソッドのラップ:
元のメソッドの変更が不可能な場合は、チェック例外をスローしない新しいメソッドでそれをラップできます:
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch(IOException e) { throw new UncheckedIOException(e); } }
ラップされたメソッドメソッドはラムダによって参照できます:
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
3. Lambda 内で例外を処理する:
または、Lambda 自体内で例外を処理することもできます:
Function<String, Integer> f = (String t) -> { try { return myMethod(t); } catch(IOException e) { throw new UncheckedIOException(e); } };
以上がJava 8 でラムダ式を使用するときにチェックされた例外を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。