gpt4 book ai didi

java - 如果 try block 不包含显式抛出异常的代码,是否有理由捕获异常并再次抛出异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:23 26 4
gpt4 key购买 nike

是否有理由编写这样的代码?

try {
foo();
} catch (final Exception e) {
throw e;
}

如果 foo() 的声明是 void foo() throws Exception 我明白为什么这可能有意义,最好显式处理异常而不是虽然不仅仅是重新抛出它,但我至少可以看出它是如何有意义的(foo() 抛出一个已检查的异常,所以它必须被捕获或抛出)。

但是,如果 foo() 的声明没有说它throws 一个异常,这有什么意义吗,还是只是糟糕的编码?

最佳答案

在您的示例中,这样做当然没有意义。然而,我见过的大多数软件都有多级异常日志记录,这些异常通常向上传播几层(调用堆栈中超过 5 层)。像这样的事情很常见:

catch (final Exception e) {
logger.log(Level.ERROR, srcInfo, "Exception in ...");
throw e;
}

但这也可能被误用,因为调用方法可能会执行自己的日志记录,并且您会在日志中留下很多重复,但这是一个设计问题。更常见的是,该方法将捕获特定的异常,例如

catch (CustomPlatformException e) {//log and throw e
}

然后将其重新抛给更高层的方法,该方法将捕获 Exception 的所有子类,并在特定流程中单独记录一般错误。

catch (Exception e) {//Log general failure in flow, usually at a higher logging level
}

关于java - 如果 try block 不包含显式抛出异常的代码,是否有理由捕获异常并再次抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28154488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com