java - 终端操作(例如 forEach)是否可以重新抛出已检查的异常?

标签 java java-8 java-stream checked-exceptions

我有一个删除一些文件的方法:

void deepDelete(Path root) {
    Files.walk(root)
            .filter(p -> !Files.isDirectory(p))
            .forEach(p -> { try { Files.delete(p); }
                            catch (IOException e) { /* LOG */ }
            });
}

try/catch block 降低了操作的可读性,尤其是与使用方法引用相比:

void deepDelete(Path root) throws IOException {
    Files.walk(root)
            .filter(p -> !Files.isDirectory(p))
            .forEach(Files::delete); //does not compile
}

不幸的是,代码无法编译。

有没有一种方法可以应用在终端操作中抛出已检查异常并简单地“重新抛出”任何异常的操作?

我知道我可以编写一个包装器将已检查的异常转换为未检查的异常,但如果可能的话我宁愿坚持使用 JDK 中的方法。

最佳答案

据我所知:没有。我用 this techempower article作为我的 java8 指南,它非常明确(请参阅标题为“异常透明度”的部分)。

关于java - 终端操作(例如 forEach)是否可以重新抛出已检查的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21690568/

相关文章:

java - ClassCast 错误 : Java 7 vs Java 8

Java8 : How to filter a map of List value via stream

functional-programming - Java 8 monad 中的流是什么?

java - 为什么我不能在 Java 中为单个类定义这两个构造函数?

java - skip() 方法是短路操作吗?

java - 格拉德鲁 : no source code available for type "userclass"

java - 如何在 Java 8 中填充 map ?

java - 如何使用 Files.walk 一次读取子目录中的所有文件?

Eclipse 中的 javadoc @value 注释问题

java - 在 Sugeno 方法上使用 java 和 jfuzzylogic 库