java - 从方法引用中捕获异常

标签 java lambda java-8

我正在尝试传递引发已检查的异常的方法引用:

Files.list((Paths.get("/some/path"))).map(Files::readAllLines);

我该如何处理此异常(不将方法引用包装在处理异常的方法中)。

最佳答案

如果您尝试在.map中捕获特定值的异常,我将不建议使用方法引用,而应使用lambda:

Files.list((Paths.get("/some/path"))).map((someVal) -> {

    try {
        //do work with 'someVal'
    } catch (YourException ex) {
        //handle error
    }

});

如果您想在之后重新抛出异常,则可以通过在框中引用错误来手动进行:
//using the exception itself
final Box<YourException> e = new Box<>();
Files.list((Paths.get("/some/path"))).map((someVal) -> {

    try {
        //do work with 'someVal'
    } catch (YourException ex) {
        //handle error
        e.setVar(ex);
    }

});
if (e.getVar() != null) {
    throw e.getVar();
}

class Box<T> {
    private T var;
    public void setVar(T var) { this.var = var; }
    public T getVar() { return this.var; }
}

关于java - 从方法引用中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23220043/

相关文章:

java - 获取 android seekbar 值并将其显示在屏幕上

java.lang.NoClassDefFoundError : org/hibernate/mapping/MappedSuperclass

c# - c# lambda cfg => {} 是什么意思?

JavaDoc - 未声明的类型变量

Java 接口(interface)使用指南——接口(interface)中的 getter 和 setter 是否不好?

java - Mybatis。提交后可以重用 session 吗?

c# - 根据 "serial"心理模型而不是 "last value"将状态变量赋予任务 lambdas?

c++ - 使用 Lambdas 时,通过捕获子句按值传递还是通过作为参数传递更高效?

Java-8 流 : Convert Map<String, List<List<DataType>>> 到 Map<String, List<DataType>>

java - 当逗号包含在java中时如何用逗号分割线