为了账号安全,请及时绑定邮箱和手机立即绑定

处理 Java8 流中的已检查异常

处理 Java8 流中的已检查异常

侃侃尔雅 2021-09-26 14:33:42
假设您有一个公开下一个接口的第 3 方库。interface Mapper {    String doMap(String input) throws CheckedException;}class CheckedException extends Exception {}我知道检查异常在 Java 中通常是一种不好的做法,但是这段代码来自第三方,我无法修改它。我想将 Mapper 接口的实现与 Java8 流 API 结合使用。考虑下面的示例实现。class MapperImpl implements Mapper {    public String doMap(String input) throws CheckedException {        return input;    }}例如,现在,我想将映射器应用于字符串集合。public static void main(String[] args) {    List<String> strings = Arrays.asList("foo", "bar", "baz");    Mapper mapper = new MapperImpl();    List<String> mappedStrings = strings            .stream()            .map(mapper::doMap)            .collect(Collectors.toList());}代码无法编译,因为 Function 不知道如何处理由 doMap 声明的 CheckedException。我想出了两种可能的解决方案。解决方案#1 - 包装调用.map(value -> {                try {                    return mapper.doMap(value);                } catch (CheckedException e) {                    throw new UncheckedException();                }            })解决方案#2 - 编写一个实用方法public static final String uncheck (Mapper mapper, String input){    try {        return mapper.doMap(input);    } catch (CheckedException e){        throw new UncheckedException();    }}然后我可以使用.map(value -> Utils.uncheck(mapper, value))在您看来,在 Java8 流的上下文中(以及在更广泛的 lambda 表达式上下文中)处理已检查异常的最佳方法是什么?谢谢!
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您可以查看在 Java 中简化函数式编程错误处理的库faux-pas。我认为在流中管理检查异常很棒。


PS:我不是这个库的作者,也不是贡献者,但我已经在几个项目中使用过这个库。


查看完整回答
反对 回复 2021-09-26
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号