本篇解析 example-flow-29.kt。探讨 catch 在处理下游异常时的局限。
1. 核心规则:仅捕获上游异常
catch 操作符遵循异常透明性原则。
规则解析:
- 它只能捕获发生在它之前(上游)的操作符或构建器的异常。
- 它无法捕获发生在它之后(下游)的异常,特别是
collect块内部的异常。
2. 代码解析
1 | simple() |
- 结果:如果
collect中发生异常,程序依然会因为未捕获异常而崩溃。
3. 开发者感悟
这是一个非常容易踩的坑。很多开发者以为加了 .catch { ... } 就万事大吉了。其实它只保证了“生产”和“加工”阶段的安全,不保证“消费”阶段的安全。如果你需要处理消费阶段的异常,请参考下一节的“声明式捕捉”。