gpt4 book ai didi

java - 处理 Java8 流中的已检查异常

转载 作者:搜寻专家 更新时间:2023-11-01 02:35:58 24 4
gpt4 key购买 nike

<分区>

假设您有一个公开下一个接口(interface)的第 3 方库。

interface Mapper {

String doMap(String input) throws CheckedException;

}

class CheckedException extends Exception {

}

我知道检查异常在 Java 中通常是一种不好的做法,但这段代码来自第 3 方,我无法修改它。

我想将 Mapper 接口(interface)的实现与 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 表达式上下文)中处理检查异常的最佳方法是什么?

谢谢!

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com