Lambda引发异常
问题内容:
鉴于此Java 8代码
public Server send(String message) {
sessions.parallelStream()
.map(Session::getBasicRemote)
.forEach(basic -> {
try {
basic.sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
});
return this;
}
我们如何正确地将IOException
其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误IOException
?)
Java中的Lambda看起来对错误处理不是很友好…
问题答案:
我的方法是从lambda 偷偷地
将其抛出,但是要小心,使该send
方法在其throws
子句中声明它。使用我在这里发布的Exceptional
课程:
public Server send(String message) throws IOException {
sessions.parallelStream()
.map(Session::getBasicRemote)
.forEach(basic -> Exceptional.from(() -> basic.sendText(message)).get());
return this;
}
这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在send
方法中声明异常,可以恢复其所有调用程序的常规行为。