我需要使一些代码超级稳定,并确保在块内抛出的所有异常都不会停止代码执行。
目前我有以下解决方案:
iterated.map(it -> {
try {
handleElement(it);
} catch (Exception e) {
handleError(e);
}
});
但从另一方面来说,我觉得应该有更优雅的方式去做。请帮我找到它。
答案 0 :(得分:0)
您的代码没有任何问题,可能我会按原样保留,但如果您愿意,您可以拥有一个处理其他功能并捕获异常的函数:
public class ExceptionCatcher<T, R> implements Function<T, R> {
public final Function<T, R> function;
public final Function<Exception, R> exceptionHandler;
public ExceptionCatcher(Function<T, R> function, Function<Exception, R> exceptionHandler) {
this.function = function;
this.exceptionHandler = exceptionHandler;
}
@Override
public R apply(T o) {
try {
return function.apply(o);
}catch (Exception e){
return exceptionHandler.apply(e);
}
}
};
,您的代码将如下所示:
ExceptionCatcher ex = new ExceptionCatcher(this::handleElement, this::handleError);
iterated.map(ex);
这只是一个例子;可能代替简单的消费者,你需要一个BiFunction
并根据异常和失败的onject映射到默认值。或者返回null并在此之后过滤null。这很大程度上取决于你想要实现的目标
答案 1 :(得分:0)
确实如何调用异常,但如何处理这些事件更为重要。当应用程序遇到无法预料的事情时,应抛出异常。只捕捉所有异常将
请注意您应用的 REAL 例外情况。以下是一些例子: