为什么不能在带有lambda的java 8 forEach中抛出已检查的Exception

时间:2015-11-27 13:46:17

标签: java exception foreach lambda java-8

我有一个场景,我想中止整个进度,如果任何迭代对象有某些不良条件(无效或其他)。 我不想跳过这个特定的对象,然后继续。

以读取CSV文件为例。如果其中一行的元素少于标题行,我将遇到映射问题。然后,我想要中止该过程,但异常" csv文件无效"我在更高层次上捕捉得恰到好处。

我使用这样的东西:

csvLines.forEach(line -> {
    if (line.isValid()) {
        doSomethingWith(line);
    } else {
        // ABORT MISSION, I REPEAT, ABORT!
        // throw new CSVNotValidException("did not work :(");
    }
});

我看到很多SO帖子关于"跳出J8 foreach",但在那里我只看到如何扩展标准行为等以某种方式使它成为可能。

我想知道,为什么以这种方式设计,在Java 8中的lambda表达式中不会抛出任何已检查的异常(并在之后的更高级别中捕获)

我在技术上知道,为什么会出现这种情况(功能界面根本没有定义抛出部分),但我不明白,为什么选择它。我只能向自己解释一下,如果你能解决所有问题而不需要需要抛出异常 - 但我实际上并不认为是这种情况。

P.S。:我不想使用RuntimeException(可能会抛出)因为我不喜欢捕获RuntimeExceptions。我想为此使用已检查的Exception。

0 个答案:

没有答案