首页 > 解决方案 > 将异常移到 Function/lambda 之外

问题描述

我知道如何处理功能接口中的异常,但我必须将异常移到我的 lambda 之外。(主要应该抛出 IOExc)

public static void main(String[] args) throws IOException {
    Function<String,List<String>> flines = f->{
//reading from input stream, but i cant use try catch
    }
}

我的新接口必须继承自 java.util.function。任何想法如何做到这一点?像这样的东西不好用

 public interface MyFunction<T,R> extends Function<T,R> {


@Override
default R apply(T t) {
    try {
    return applyThrows(t);
    }catch (Exception e){
        throw new RuntimeException(e);
    }
}

R applyThrows (T t) throws IOException;

标签: javaexceptionlambdajava-8try-catch

解决方案


这里有两个方面:

  • 正如 JB 所评论的那样,当您确实必须取回已检查的异常时,您的 lambda 可以将其包装到运行时异常中,并且外部代码可以捕获该异常并解开已检查的异常并重新抛出该异常。
  • 但是,仅仅因为可以,就将语言强制构造为构造并不是一个好主意。如果核心设计点是处理 IO,而你有处理 IOExceptions 的需求,那么正确的做法是不要在这里使用 lambdas!

推荐阅读