Lambda中的异常处理
在Lambda中使用try-catch处理是比较丑陋的,那么如何优雅的处理异常昵?
我们可以采取将异常包装的方式进行处理,下面将以Function函数为例
- 新建一个函数接口,该接口抛出异常
@FunctionalInterface
public interface CheckExceptionFunction<T, R> {
R apply(T t) throws Exception;
}
- 新建一个函数工具类,方便调用
public class LambdaUtil {
public static <T, R> Function<T, R> checkExceptionFunction(CheckExceptionFunction<T, R> function) {
return a -> {
try {
return function.apply(a);
} catch (Exception e) {
// 这里可以自行决定是抛出让上层处理,还是日志记录,还是其它操作
throw new RuntimeException(e);
}
};
}
}
通过以上的包装,在Lambda中就可以很优雅的将异常进行处理了,不需要再写try-catch进行处理。