首页 > 解决方案 > 抓住 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;

标签: javasonarlint

解决方案


是的,这是一种不好的做法。在 Java 中 Throwable 是 Error 和 Exception 的基类。您已经熟悉异常,可以检查或取消检查它们,因此您可以捕获它们并处理、记录或重新抛出。

错误更复杂,它们是 JVM 错误,例如 OutOfMemoryException,它是 VirtualMachineError。你将如何在你的代码中处理这个?答案是:你根本做不到。

如果您搜索“可恢复和不可恢复的情况”,则异常是可恢复的情况,因为您可以处理 NullPointerException 而不可恢复的情况是错误。

如果你想查看 Baeldung,这是一个关于 Java、Spring 等的非常好的博客。 https://www.baeldung.com/java-catch-throwable-bad-practice


推荐阅读