主要观点:Java 8 后 Stream API 和 lambda 有很大改进,但处理 lambda 中的检查异常是个问题,直接在 lambda 中调用抛检查异常的方法不行,有多种解决方式。
关键信息:
- 可在 lambda 中用 try-catch 并将检查异常包装为 RuntimeException,但这不是最好方法。
- 可将调用封装在普通方法中,从 lambda 中调用,更可读且分离关注点。
- 可编写自己的函数式接口
CheckedFunction
来处理抛异常的函数,通过工具函数wrap
处理。 - 引入 Either 类型,可将异常或值作为结果,避免流因异常终止,还可添加
liftWithValue
处理带值的异常。 - Try 类型与 Either 类似,左部固定为 Exception,但作者更倾向于 Either 的灵活性。
- 可自己实现 Either 和 Try,也可使用功能库如 VAVR,需考虑是否引入大型库。
重要细节: - 示例代码展示了在 Stream 中处理检查异常的不同方式,如用 map 结合不同函数处理。
- 介绍了 Either 类型的基本实现,包括左右部分、获取左右部分的方法等。
- 提到 Try 类型的基本结构,左部为 Exception,右部为任意类型。
- 指出可通过功能库如 VAVR 来处理异常,需考虑依赖问题。
总结来说,在 Java 中处理 lambda 中的检查异常有多种途径,Either 和 Try 类型提供了更多控制和灵活性,可根据需求选择合适的方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。