繁体   English   中英

使代码错误稳定的最佳实践是什么?

[英]What are the best practice of making code error stable?

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

现在,我有以下解决方案:

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

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

您的代码没有错,我可能会保持原样,但是如果您愿意,您可以拥有一个处理另一个函数并捕获异常的函数:

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映射到默认值,而不是简单的Consumer。 或返回null并在此之后过滤null。 这很大程度上取决于您要实现的目标

那确实是调用异常的方法,但是更重要的是如何处理这些事件。 当应用遇到无法预期的情况时,应引发异常。 仅捕获所有异常将

  • 不能使代码更稳定,只是不会引发更高的异常
  • 错误保持原样,并且仍然会抛出错误(您可能想要这样做)
  • 删除您可能想要记录的异常

请记住,什么是您的应用程序真正的例外。 这里有些例子:

  • 您与后端的连接不稳定。 您知道这一点,并使应用程序可以重新连接和/或推迟操作,或者为了使该应用程序实际上不稳定的任何原因:
    • 这也不例外,如果需要,只需记录一条消息。
  • 客户输入了一些信息
    • 也不例外,这种情况一直都在发生,应用应对此进行处理
  • 更新一些代码后,即使建立连接也有问题
    • 例外:将其记录下来并解决问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM