例外をスローする Java 8 Lambda 関数? 質問する

例外をスローする Java 8 Lambda 関数? 質問する

Stringパラメータを持ち、 を返すメソッドへの参照を作成する方法はわかっていますint

Function<String, Integer>

ただし、関数が例外をスローする場合は、これは機能しません。次のように定義されているとします。

Integer myMethod(String s) throws IOException

この参照をどのように定義すればよいでしょうか?

ベストアンサー1

次のいずれかを実行する必要があります。

  • 自分のコードの場合は、チェック例外を宣言する独自の機能インターフェースを定義します。

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

    そしてそれを使用します:

    void foo (CheckedFunction f) { ... }
    
  • それ以外の場合は、Integer myMethod(String s)チェック例外を宣言しないメソッドでラップします。

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

おすすめ記事