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