使代码错误稳定的最佳做法是什么?

时间:2016-07-21 09:28:21

标签: java design-patterns error-handling exception-handling

我需要使一些代码超级稳定,并确保在块内抛出的所有异常都不会停止代码执行。

目前我有以下解决方案:

iterated.map(it -> {
   try {
      handleElement(it);
   } catch (Exception e) {
      handleError(e);
   }
});

但从另一方面来说,我觉得应该有更优雅的方式去做。请帮我找到它。

2 个答案:

答案 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 例外情况。以下是一些例子:

  • 您与后端有连接,后端不稳定。你知道这一点,并使应用程序可以重新连接和/或推迟操作,或者为了应用程序使该后端实际上不稳定:
    • 这不是例外,只需在需要时记录消息。
  • 客户误导了一些信息
    • 没有例外,这种情况一直发生,应用应该应对
  • 经过一些代码更新后,即使设置连接也存在问题
    • EXCEPTION:记录并解决问题!