java - 抓住 Throwable 是一种不好的做法吗?
问题描述
捕获 Throwable 是一种不好的做法吗?例如我的代码是这样的。但是在声纳中它显示为错误。我们如何解决这个问题
代码
try {
return restTemplate.getForObject(urlSearchID, AccessIDSearchResponse.class);
} catch (HttpServerErrorException hse) {
AccesIdExceptionUtility.recoverFromHttpServerExc(hse);
} catch (HttpClientErrorException hce) {
AccesIdExceptionUtility.recoverFromHttpClientExc(hce);
} catch (ClientException ce) {
AccesIdExceptionUtility.recoverFromClientExc(ce);
} catch (Exception e) {
AccesIdExceptionUtility.recoverFromException(e);
}
catch (Throwable ex) {
throw new ServiceException(ErrorMessages.EPO_SYSTEM_ERROR, ex.getMessage(), agentSearchUrl);
}
return null;
解决方案
是的,这是一种不好的做法。在 Java 中 Throwable 是 Error 和 Exception 的基类。您已经熟悉异常,可以检查或取消检查它们,因此您可以捕获它们并处理、记录或重新抛出。
错误更复杂,它们是 JVM 错误,例如 OutOfMemoryException,它是 VirtualMachineError。你将如何在你的代码中处理这个?答案是:你根本做不到。
如果您搜索“可恢复和不可恢复的情况”,则异常是可恢复的情况,因为您可以处理 NullPointerException 而不可恢复的情况是错误。
如果你想查看 Baeldung,这是一个关于 Java、Spring 等的非常好的博客。 https://www.baeldung.com/java-catch-throwable-bad-practice
推荐阅读
- python - 管理 Python turtle 何时检查事件
- sql - 类似于 RANK 的 Oracle SQL 函数
- sql - 在 postgresql 中检查表中的条目
- javascript - CSS 淡入淡出延迟?
- sql - 如何使用多个操作进行 SQL 查询?
- amazon-web-services - 在亚马逊工作区上运行软件
- visual-studio - Visual Studio 2017 可以在 Windows 10 on ARM(即 Asus NovaGo)上安装和使用吗?
- graphql - Prismy deploy 命令抛出 Invalid Version 错误
- mysql - 将视图从生产副本复制到数据仓库
- ruby - 如何编写没有标题的 CSV