【发布时间】:2015-07-14 09:20:45
【问题描述】:
在《Scala 中的函数式编程》一书中,有一段话讲到了“受检异常”:
检查的异常
Java 的已检查异常至少会强制决定是处理还是重新引发错误,但它们会为调用者带来大量样板文件。更重要的是,它们不适用于高阶函数,它们不可能知道它们的参数可能引发的特定异常。例如,考虑我们为 List 定义的 map 函数:
def map[A,B](l: List[A])(f: A => B): List[B]这个函数显然很有用,高度通用,并且与检查异常的使用不一致——我们不能为
f可能抛出的每个检查异常都提供一个 map 版本。即使我们想这样做,map 怎么会知道哪些异常是可能的呢?这就是为什么通用代码,即使是在 Java 中,也经常求助于使用 RuntimeException 或一些常见的检查异常类型。
这部分我读了好几遍,但仍然不清楚为什么已检查异常不适用于高阶函数。
有人可以举一些例子更清楚吗?
【问题讨论】:
标签: scala functional-programming higher-order-functions checked-exceptions