当前位置: 首页 > 知识库问答 >
问题:

执行异常处理流程

段干瑞
2023-03-14

我应该知道这一点,但不知为何我现在还想不出来。

是否有方法重写此代码以避免instanceof

try {
    //Exceptions may happen
} catch (Exception1 exception1) {
    //do stuff only in case of Exception1
} catch(Exception e) {
    // do stuff in all exception cases except Exception1
    if (e instanceof Exception2) {
        // do stuff only in case of Exception2
    }
}

共有2个答案

夏祺然
2023-03-14

在没有任何进一步上下文的情况下,IMO以下内容已经足够好了:

try {
    //Exceptions may happen
} catch (Exception1 exception1) {
    //do stuff only in case of Exception1
} catch (Exception2 exception2) {
    some_method();
}
catch(Exception e) {
    some_method();
}

其中some_method将封装与“//do stuff in all exception cases exception1”相关的代码

谢奇略
2023-03-14

如果将exception的异常处理内联,并且不想重复它,那么唯一的解决方案就是OP解决方案。

但是,如果您可以将常见的异常处理放入函数中,那么这就很简单了:

try {
    //Exceptions may happen
} catch (Exception1 exception1) {
    //do stuff only in case of Exception1
} catch(Exception2 e) {
    doCommonStuff();
    doException2Stuff();
} catch(Exception e) {
    doCommonStuff();
}

但是,在您是否希望将控制权传递给try/catch块之外,或者您是否希望返回一个值,甚至抛出另一个异常方面,上述操作可能会导致一个小问题。

您可能会发现,尽管您的代码的所有路径都抛出了异常,但上面的构造(使用常见的异常处理程序方法)在编译器看来可能像某些控制路径一样。

因此,您可以表达一个公共异常处理程序,它总是抛出如下所示的异常:

private <T> T throwLastException(Exception2 input) {
   // blah blah blah
   throw new SomeException();
}

这可以作为return语句的一部分调用,该语句看起来是为了保证调用函数返回一个值,而实际上它只是告诉编译器不要担心:)

 类似资料:
  • 主要内容:前记,1.processHandlerException方法前记 根据之前的文章方法中的方法返回处理的方法 1.processHandlerException方法 这个方法就是如果出现异常的话, 异常解析器进行处理异常。 先判断是否是注解下的方法, 如果是的话另外处理 -> 判断是否是注解下的方法 这里的主要有3个实现类 1.1注解下的异常 1.2注解下的方法 获取到装填码 获取到出错理由 然后渲染异常的页面 返回空的ModelAndView 1.3解析方

  • 由于预设审批人退出企业,导致模版自动停用时,可以在“异常处理”页面进行相应操作。

  • 曾发表过多篇文章,但大多数都与处理错误消息有关,而不是处理过程中的异常处理。 我想知道如何处理流应用程序接收到的消息,并且在处理消息时出现异常?异常可能是由于多种原因造成的,如网络故障、RuntimeException等。, 有人能提出正确的方法吗?我应该使用setUncaughtExceptionHandler吗?还是有更好的方法

  • 问题内容: 曾经经历过多个帖子,但是其中大多数都是相关的处理错误消息,与处理它们时的异常处理无关。 我想知道如何处理流应用程序收到的消息,并且在处理消息时出现异常?该异常可能是由于多种原因造成的,例如网络故障,RuntimeException等, 有人可以建议正确的做法吗?我应该使用 吗?或者,还有更好的方法? 如何处理重试? 问题答案: 这取决于您要如何处理生产者方面的异常。如果将对生产者抛出异

  • 我正在开发一个应用程序,在该应用程序中,事件会导致spring data repository保存数据; 此代码可以引发各种异常,如DataIntegrityViolationException(运行时异常)。 处理此类异常和 生成带有导致此错误的有效负载的消息 例外, 允许生产者采取操作。

  • 我正在努力定制我的spring kafka streams应用程序。我一直试图在我的KStreams上配置处理未捕获(运行时异常)。 参考文档https://docs.spring.io/spring-cloud-stream-binder-kafka/docs/3.1.0/reference/html/spring-cloud-stream-binder-kafka.html#_kafka_st