gpt4 book ai didi

java - 安卓/Java : how to define a code block and leave it without custom exceptions?

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

我似乎陷入了一个非常简单的任务,需要 GOTO 语句,并且在我看来,这将证明使用这些语句是合理的。

我有一个非常简单的任务,可以在不同的条件下退出void。在其代码中,正在执行数十个操作,其中大多数操作可能会失败。我使用 try {} 测试它们。

现在,根据操作的重要性,我要么需要立即退出而不执行其他操作,要么只需要中断控制流并跳转到最后一点进行一些清理,然后退出该方法。

MWE:

public void myMethod () {
try { op1(); } catch (Exception e) { return; } // Fail here: exit immediately
try { op2(); } catch (Exception e) { cleanUpFirst(); return; } // Fail here: do Cleaning up first, then exit
try { op3(); } catch (Exception e) { return; } // Fail here: exit immediately
try { op4(); } catch (Exception e) { cleanUpFirst(); return; } // Fail here: do Cleaning up first, then exit
try { op5(); } catch (Exception e) { cleanUpFirst(); return; } // Fail here: do Cleaning up first, then exit
// ....
}
public void cleanUpFirst() { /* do something to clean up */ }

为了代码的可读性,我希望 a) 避免使用单独的函数,b) 在 catch block 中不要有多个语句;它只会破坏代码。因此,在我看来,这完全证明了使用 GOTO 语句的合理性。

但是,鉴于只有两种结果可能,我想出的唯一解决方案是:

public void myMethod () {
do {
try { op1(); } catch (Exception e) { return; }
try { op2(); } catch (Exception e) { break; }
try { op3(); } catch (Exception e) { return; }
try { op4(); } catch (Exception e) { break; }
try { op5(); } catch (Exception e) { break; }
// ....
} while (1==0);
/* do domething to clean up */
}

是的,我听说过异常,这就是 Java 的方式。这不像使用单独的 void 那样太过分了吗?我不需要具体细节,我只需要每个操作的是/否结果。有更好的办法吗?

最佳答案

为什么不

boolean cleanupfirst = false;

try {
op1 ();
cleanupfirst = true;
op2 ();
cleanupfirst = false;
op3 ();
} catch (Exception e) {
if (cleanupfirst)
cleanup ();
return;
}

关于java - 安卓/Java : how to define a code block and leave it without custom exceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21109007/

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