当使用jdk8 lambda表达式循环时,主动捕获异常抛出,此时编译器会编译不通过,解决办法:
1、放弃使用lambda表达式,以普通循环代替;
2、以非受检异常,也就是运行时异常包装后抛出 throw new RuntimeException(e);
3、通过泛型的方式进行包装:
try{
}catch(受检异常 e) {
lambdaThrowException(e);
}
/** * 把受检异常包装成非受检异常再抛出,避免破坏Java异常的结构,通过泛型的方式解决这个问题 * @param e * @param <E> * @throws E */ static <E extends Exception> void lambdaThrowException(Exception e) throws E { throw (E)e; }