在《Scala 中的函数式编程》一书中,有一段话讲到了“受检异常”:
已检查的异常
Java 的检查异常至少会强制决定是否处理或重新引发错误,但它们会导致调用者的大量样板文件。更重要的是,它们不适用于高阶函数,它们不可能知道它们的参数可能引发的特定异常。例如,考虑我们为 List 定义的 map 函数:
def map[A,B](l: List[A])(f: A => B): List[B]
这个函数显然很有用,高度通用,并且与检查异常的使用不一致——我们不能为每个可能由
f
. 即使我们想这样做,map 怎么会知道哪些异常是可能的呢?这就是为什么通用代码,即使在 Java 中,也经常求助于使用 RuntimeException 或一些常见的检查异常类型。
这部分我读了好几遍,但仍然不清楚为什么受检异常不适用于高阶函数。
有人可以举一些例子让它更清楚吗?