第3章 ラムダ式を使ったプログラミング : 問題 18 : Function と例外
問題
Function<T, U>
の抽象メソッドと同じシンタックスでチェック例外をスローするラムダ式からFunction<T, U>
を生成する unchecked メソッドを実装せよ
解答
本文にCallable<T>
からSupplier<T>
を生成する unchecked メソッドが載っている
■ Callable<T>
からSupplier<T>
生成
public static <T> Supplier<T> unchecked(Callable<T> f) { return () -> { try { return f.call(); } catch (Exception ex) { throw new RuntimeException(ex); } }; }
この uncheck メソッドをちょこっと直すだけだが、まずチェック例外をスローする関数型インターフェースを定義する
■ 例外をスローする関数型インターフェース
@FunctionalInterface public interface ThrowableFunction<T, U> { U apply(T t) throws Exception; }
■ ThrowableFunction<T, U>
からFunction<T, U>
生成
public static <T, U> Function<T, U> unchecked(ThrowableFunction<T, U> f) { return (t) -> { try { return f.apply(t); } catch (Exception ex) { throw new RuntimeException(ex); } }; }