gpt4 book ai didi

java - 如果子方法之一抛出异常,则跳过代码执行的最佳设计模式

转载 作者:行者123 更新时间:2023-12-01 20:18:18 25 4
gpt4 key购买 nike

我正在使用 core java 开发一个测试框架。在我的应用程序中,我有一个父方法,它调用十个不同的子方法,其中每个方法都可以抛出自己的异常。要求是提供有关父方法执行的详细日志信息,其中包含执行该方法所需的总时间、执行每个子方法所需的时间、记录任何异常等信息。我为此使用多个 try catch finally block 。

我的问题是,如果某个子方法抛出异常,跳过剩余子方法执行的最佳方法是什么?例如:如果方法 4 抛出异常,我想记录该异常并转到末尾并记录父方法在此之前所花费的时间。

我尝试使用 boolean 变量在父方法的开头将其初始化为 true 。我在执行每个子方法之前检查 boolean 变量是否为真。每当抛出异常时,我都会将 boolean 变量标记为 false。

我的伪代码如下所示:

public String parentMethod(){
boolean execute = true;
if(execute) {
try event1;
catch(Event1Exception e1)
log e1; execute = false;
finally log event 1 time taken;
}
if(execute) {
try event2;
catch(Event1Exception e2)
log e2; execute = false;
finally log event 2 time taken;
}
and so on ....
log total time taken;

在我的实际代码中,我有大约十个不同的事件,它们会抛出自己的异常,有时甚至不止一个。使用这种方法,为每个捕获的异常分配execute = false,然后再次检查execute的值似乎很笨拙。有没有比这更好的方法,而不使用任何额外的插件?

最佳答案

您可以只记录异常并重新抛出它:

public String parentMethod(){
try {
try {
...
} catch(Event1Exception e1) {
log e1;
throw e1;
} finally {
log event 1 time taken;
}

try {
...
} catch(Event2Exception e2) {
log e2;
throw e2;
} finally {
log event 2 time taken;
}

} catch (Event1Exception | Event2Exception | ... e) {
// Can be safely ignored
}
}

或者,如果您不想单独处理每个异常,您可以这样做:

public String parentMethod(){
try {
try {
...
} finally {
log event 1 time taken;
}

try {
...
} finally {
log event 2 time taken;
}

} catch (Event1Exception | Event2Exception | ... e) {
log e
}
}

关于java - 如果子方法之一抛出异常,则跳过代码执行的最佳设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45324998/

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